鱼C论坛

 找回密码
 立即注册
123
返回列表 发新帖

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

[复制链接]
 楼主| 发表于 2020-5-15 12:46:17 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-5-15 12:51 编辑
March2615 发表于 2020-5-15 10:59
感谢指出
1. n,k不互质是否就指n和k有大于1的公因子?那有什么问题呢?我暂时没想到,你可以告诉我一下
...


2.错误,是 k 分解质因数的结果只有 2 和 5,n/k 才是有限小数。举例:30。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-15 13:06:14 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-15 12:46
2.错误,是 k 分解质因数的结果只有 2 和 5,n/k 才是有限小数。举例:30。

OK 我的 这就去改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 13:08:27 | 显示全部楼层
咸鱼c1 发表于 2020-5-13 23:22
刚刚开始学python,不知道做的对不对

做的没什么问题,但是不要用 1e6 1e7 什么的,浮点数有误差。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-15 13:13:28 | 显示全部楼层
占楼看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-15 21:13:42 | 显示全部楼层
  1. from fractions import Fraction
  2. from math import gcd
  3. def S(a,b):
  4.     def m(n):
  5.         k = 2
  6.         while n/(k+1)*(k/(k+1))**k>1:
  7.             k += 1
  8.         return [n**k,k**k]
  9.    
  10.     def judge_num(in_num):
  11.         l = []
  12.         while in_num > 1:
  13.             for i in range(2, in_num+1):
  14.                 if in_num % i == 0:
  15.                     in_num = in_num // i
  16.                     l.append(str(i))
  17.             break
  18.         for x in l:
  19.             if x!='2' and x!='5':
  20.                 return False
  21.             else:
  22.                 return True
  23.     def inf(x,y):
  24.         res=Fraction(x,y)
  25.         fm=res.denominator
  26.         if judge_num(fm):
  27.             return False
  28.         else: return True
  29.     def d(n):
  30.         if inf(m(n)[0],m(n)[1]):
  31.             return "%.6f" % (m(n)[0]/m(n)[1])
  32.         else:
  33.             return "%.7f" % (-m(n)[0]/m(n)[1])
  34.             
  35.     L=[d(i) for i in range(a,b+1)]
  36.     print(L)
  37.     return sum([float(i) for i in L])

  38. print(S(5,10))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 21:24:48 | 显示全部楼层

已经结帖了
不过为什么你要转字符串呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 17:21:49 | 显示全部楼层
“将 正整数 那平分为 k 份” 的这个 k 应该是个整数,对吧?就我的常识判断来说,份是个整数量词。
那么当 n = 4 的时候,取得 m(n) 的 k 有两个,1 和 2,此时 m(n) 为 4.0 ,若 k 取 1 则 d(n) 为 -1,若 k 取 2 则 d(n) 为 -65536,这种情况怎么算呢?
是都加上,还是 1 个 n 只对应一个 d(n)?若是后者,这 k 怎么取?
我还得研究研究 a^(a^(a^(a^(...)))) 的末尾的规律,研究不出来的话,这题我就做不了,用时会特别长。一个月没来做题,难度居然上涨的这么夸张吗?!

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 17:23:19 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-5-15 21:24
已经结帖了
不过为什么你要转字符串呢

惊!结贴是什么?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 17:44:55 | 显示全部楼层
阴阳神万物主 发表于 2020-5-25 17:21
“将 正整数 那平分为 k 份” 的这个 k 应该是个整数,对吧?就我的常识判断来说,份是个整数量词。
那么 ...

“将 正整数 那平分为 k 份” 的这个 k 应该是个整数,对吧?就我的常识判断来说,份是个整数量词。
那么当 n = 4 的时候,取得 m(n) 的 k 有两个,1 和 2,此时 m(n) 为 4.0 ,若 k 取 1 则 d(n) 为 -1,若 k 取 2 则 d(n) 为 -65536,这种情况怎么算呢?
是都加上,还是 1 个 n 只对应一个 d(n)?若是后者,这 k 怎么取?
我又漏了 a>=5 这个条件……


直接跟你说了末尾规律吧,快速幂取模。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 00:14:08 | 显示全部楼层
难度评级:中等偏上
要素分析:数论
代码:
  1. def S(a,b,which=0):#which这个参数是我对于题目理解在一点细节处理上的的分歧。
  2.     e = 2.71828459
  3.     def gcb(c,d):#辗转相除法
  4.         while d:c,d = d,c%d
  5.         return c
  6.     def m(n):
  7.         l = int(n/e)
  8.         r = l + 1
  9.         k = l if (n/l)**l > (n/r)**r else r
  10.         k1 = k/gcd(n,k)
  11.         while (g:=k1/5)==int(g):k1=g
  12.         while (g:=k1/2)==int(g):k1=g
  13.         lim = int(k1 == 1)+5
  14.         return (k,lim)
  15.     def f(k,n,l):
  16.         m = 10**l
  17.         u = k
  18.         for i in range(n):
  19.             down = k
  20.             uns = 1
  21.             while u:#楼主提示的快速幂取模
  22.                 if u&1:uns = (uns*d)%m
  23.                 down = (down**2)%m
  24.                 u >>= 1
  25.             u = uns
  26.         return u
  27.     def d(n):
  28.         k,lim = m(n)
  29.         get = f(k,n,lim+1)
  30.         if which and lim-5:get*=-1
  31.         elif not which:
  32.             l = 10**lim
  33.             if lim&1:get*=(-1**int(bool(get%l)))
  34.         return get
  35.     res = 0
  36.     for n in range(a,b+1):
  37.         res += d(n)
  38.     return res
复制代码

备注:which 参数是一个 bool 值,为命题 {m(n)为有限小数时,d(n)取值一定为负} 的真假性。
我理解的分歧是
d(n)=-f(k,n) 的最后 7 位

意思是 d(n)=[ -f(k,n) ] 的最后 7 位
还是 d(n)=- [f(k,n) 的最后 7 位 ]
例:若 f(k,n) = 123456789 ,则
3456789 = [-123456789] 的最后七位
-3456789 =- [123456789 的最后 7 位 ]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-26 15:42:28 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-10 20:17:06 | 显示全部楼层
怎么做题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 00:14:11 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 16:05:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-8-9 10:21:46 | 显示全部楼层
找答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 17:36:48 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 17:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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