鱼C论坛

 找回密码
 立即注册
查看: 7009|回复: 56

[技术交流] Python:每日一题 392

[复制链接]
发表于 2020-5-13 17:26:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 永恒的蓝色梦想 于 2020-5-25 17:51 编辑

今天的题目:


函数 f(a,b) 递归定义如下:
f(a,1)=a
f(a,b)=af(a,b-1)


有 正整数 n,将 n 平分成 k 份,定义 m(n) 为 (n/k)k 的最大值。

如果 m(n) 为无限小数,则 d(n)=f(k,n) 的最后 6 位,否则 d(n)=-f(k,n) 的最后 7 位。

编写函数 S(a,b),求 5 ≤ a ≤ n ≤ b ≤ 100 时,所有 d(n) 的和。


欢迎大家一起答题!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-13 17:28:32 | 显示全部楼层
占个楼  看看会不会做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 19:48:02 | 显示全部楼层
本帖最后由 March2615 于 2020-5-13 19:51 编辑

题目中的f(a,b)=a^f(a, k-1),k是啥呀
定义 m(n) 为 (n/k)^p 的最大值,p又是啥呀

评分

参与人数 1鱼币 +1 收起 理由
永恒的蓝色梦想 + 1 感谢指出~我人傻了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 19:48:36 | 显示全部楼层
本帖最后由 TJBEST 于 2020-5-13 19:51 编辑

前排,后面补充
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 19:52:11 | 显示全部楼层
不过你的字母是不是有点问题?前后对不上
@永恒的蓝色梦想

评分

参与人数 1鱼币 +1 收起 理由
永恒的蓝色梦想 + 1 感谢指出~我人傻了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 20:26:49 | 显示全部楼层
您这个是欧拉计划183题吗?
(我就是记得看到过挺像的,专门去找了一下)

评分

参与人数 1鱼币 +1 收起 理由
永恒的蓝色梦想 + 1 这是一道 mix 加 改编 的题

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:42:47 | 显示全部楼层
函数 f(a,b) 递归定义如下:
f(a,1)=a
f(a,b)=af(a,k-1)
K是怎么定义的

评分

参与人数 1鱼币 +1 收起 理由
永恒的蓝色梦想 + 1 感谢指出……刚检查出来就被你发现了

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:43:26 | 显示全部楼层
函数 f(a,b) 递归定义如下:
f(a,1)=a
f(a,b)=af(a,b-1)
是不是应该这么定义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:49:09 | 显示全部楼层
就只有我自己读不懂题么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 21:49:52 | 显示全部楼层
本帖最后由 March2615 于 2020-5-13 21:53 编辑

再多嘴问一句

编写函数S(a, b)啊  n不是有范围了嘛[a,b] 为什么还需要传入这个参数

(今天这题太绕太难了,我已经大概率知道我做不出来了,如果可以的话请把我这几层删掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 21:52:45 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-5-13 22:01 编辑
March2615 发表于 2020-5-13 21:49
再多嘴问一句,最后是不是   编写函数S(a, b)啊  n不是有范围了嘛[a,b] 为什么还需要传入这个参数
(我已 ...


非常抱歉……我谢罪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-13 21:57:07 | 显示全部楼层
March2615 发表于 2020-5-13 21:49
再多嘴问一句

编写函数S(a, b)啊  n不是有范围了嘛[a,b] 为什么还需要传入这个参数

这道题是 mix 的 Project Euler 183 和 188,然后改编的。
有兴趣的话,可以看一下我在这两道题下的评论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 23:22:54 | 显示全部楼层
本帖最后由 咸鱼c1 于 2020-5-14 13:12 编辑

刚刚开始学python,不知道做的对不对
def pow(x,n):
        ret=1
        while n>0:
                ret*=x
                ret=ret%1e7
                n-=1
        return ret
def gcd(a,b):
        while True:
                c=a%b
                a=b
                b=c
                if b==0:
                        return a
def f(a,b):
        if b==1:
                return a
        else:
                return pow(a,f(a,b-1))%1e7

def m(n):
        max_m=-1
        for i in range(1,n+1):
                temp=pow(n/i,i)
                if temp>max_m:
                        max_m=temp
                        ret=i
        c=gcd(n,ret)
        i=ret/c
        while i%2==0 :
                i/=2
        while i%5==0 :
                i/=5
        if i!=1:
                i=0
        return ret,max_m,i
def S(n,a,b):
        s=0
        for i in range(a,b+1):
            temp=m(i)
            if(temp[2]==1):
                    s+=-f(temp[0],i)%1e7
            else:
                    s+=f(temp[0],i)%1e6
        return s
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-14 10:18:48 | 显示全部楼层
领取鱼币学习

评分

参与人数 1鱼币 +5 收起 理由
高山 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 10:20:57 | 显示全部楼层

很抱歉,这里不是发鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 12:25:23 | 显示全部楼层
本帖最后由 March2615 于 2020-5-15 13:37 编辑
from math import e


def m(n: int) -> tuple:
    """
    取f(x) = (n/x)^x 的最大值,求导可知 x = n / e 时取到。
    比较int(n/e)和int(n/e)+1的值即可
    判断(n/k)^k是否是无限小数 -> 判断n/k是否是无限小数 -> k是不是2或者5的倍数
    :param n: 
    :return: 切割的份数 以及 (n/k)^k 是否为无限小数  (k, flag)
    """
    x = int(n / e)
    k = x if pow(n / x, x) > pow(n / (x + 1), x + 1) else x + 1
    flag = True
    if k % 5 and k % 2:
        flag = False
    return k, flag


def f(k, n, flag):  # 超幂 超出数字范围了
    # 参考欧拉计划188,发现可以每一步都取余,这样就不会超范围了
    num = 1000000 if flag else 10000000
    if n == 1:
        return k % num
    return pow(k, f(k, n - 1, flag), num)


def s(a: int, b: int) -> int:
    res = 0
    for i in range(a, b + 1):
        k, flag = m(i)
        res = res + f(k, i, flag) if flag else res - f(k, i, flag)  # 否则 d(n)=-f(k,n) 的最后7位 -- 不知道该不该带符号
    return res


if __name__ == '__main__':
    print(m(8))
    print(s(8, 8))

大概就是这样吧,不知道了

——————————————————————————————————————————————————————
0515 13:35修改,原m(n)部分考虑不周,无限小数判断错误
def m(n: int) -> tuple:
    """
    取f(x) = (n/x)^x 的最大值,求导可知 x = n / e 时取到。
    比较int(n/e)和int(n/e)+1的值即可
    判断(n/k)^k是否是无限小数 -> 判断n/k是否是无限小数 
    -> k = 2^p * 5^q (p, q >= 0) 时为有限小数
    :param n: 
    :return: 切割的份数 以及 (n/k)^k 是否为有限小数  (k, flag)
    """
    x = int(n / e)
    k = x if pow(n / x, x) > pow(n / (x + 1), x + 1) else x + 1

    def iint(k: int) -> bool:
        while k // 2 == 0:
            k //= 2
        while k // 5 == 0:
            k //= 5
        return k == 1

    return k, iint(k)

评分

参与人数 3荣誉 +3 鱼币 +5 贡献 +3 收起 理由
andy大宝 + 1 + 1 鱼C有你更精彩^_^
不二如是 + 2 + 3 + 3 按时间记录修改很棒哦!!
赚小钱 + 1 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-14 13:05:04 | 显示全部楼层
回复每日一题有鱼币吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 13:05:10 | 显示全部楼层
March2615 发表于 2020-5-14 12:25
大概就是这样吧,不知道了

k如果是n/e的话,那是不是都是无限小数了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 13:18:42 | 显示全部楼层
咸鱼c1 发表于 2020-5-14 13:05
k如果是n/e的话,那是不是都是无限小数了

x = int(n / e) 了呀,k在x和x+1里面选结果较大的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 13:25:50 | 显示全部楼层
瞪眼雄 发表于 2020-5-14 13:05
回复每日一题有鱼币吗

做题才有。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 16:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表