永恒的蓝色梦想
发表于 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。
March2615
发表于 2020-5-15 13:06:14
永恒的蓝色梦想 发表于 2020-5-15 12:46
2.错误,是 k 分解质因数的结果只有 2 和 5,n/k 才是有限小数。举例:30。
OK 我的 这就去改{:10_266:}
永恒的蓝色梦想
发表于 2020-5-15 13:08:27
咸鱼c1 发表于 2020-5-13 23:22
刚刚开始学python,不知道做的对不对
做的没什么问题,但是不要用 1e6 1e7 什么的,浮点数有误差。
rsj0315
发表于 2020-5-15 13:13:28
占楼看看
ouyunfu
发表于 2020-5-15 21:13:42
from fractions import Fraction
from math import gcd
def S(a,b):
def m(n):
k = 2
while n/(k+1)*(k/(k+1))**k>1:
k += 1
return
def judge_num(in_num):
l = []
while in_num > 1:
for i in range(2, in_num+1):
if in_num % i == 0:
in_num = in_num // i
l.append(str(i))
break
for x in l:
if x!='2' and x!='5':
return False
else:
return True
def inf(x,y):
res=Fraction(x,y)
fm=res.denominator
if judge_num(fm):
return False
else: return True
def d(n):
if inf(m(n),m(n)):
return "%.6f" % (m(n)/m(n))
else:
return "%.7f" % (-m(n)/m(n))
L=
print(L)
return sum()
print(S(5,10))
永恒的蓝色梦想
发表于 2020-5-15 21:24:48
ouyunfu 发表于 2020-5-15 21:13
已经结帖了{:10_277:}
不过为什么你要转字符串呢{:10_277:}
阴阳神万物主
发表于 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^(...)))) 的末尾的规律,研究不出来的话,这题我就做不了,用时会特别长。一个月没来做题,难度居然上涨的这么夸张吗?!
阴阳神万物主
发表于 2020-5-25 17:23:19
永恒的蓝色梦想 发表于 2020-5-15 21:24
已经结帖了
不过为什么你要转字符串呢
惊!结贴是什么?
永恒的蓝色梦想
发表于 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 这个条件……
直接跟你说了末尾规律吧,快速幂取模。
阴阳神万物主
发表于 2020-5-26 00:14:08
难度评级:中等偏上
要素分析:数论
代码:def S(a,b,which=0):#which这个参数是我对于题目理解在一点细节处理上的的分歧。
e = 2.71828459
def gcb(c,d):#辗转相除法
while d:c,d = d,c%d
return c
def m(n):
l = int(n/e)
r = l + 1
k = l if (n/l)**l > (n/r)**r else r
k1 = k/gcd(n,k)
while (g:=k1/5)==int(g):k1=g
while (g:=k1/2)==int(g):k1=g
lim = int(k1 == 1)+5
return (k,lim)
def f(k,n,l):
m = 10**l
u = k
for i in range(n):
down = k
uns = 1
while u:#楼主提示的快速幂取模
if u&1:uns = (uns*d)%m
down = (down**2)%m
u >>= 1
u = uns
return u
def d(n):
k,lim = m(n)
get = f(k,n,lim+1)
if which and lim-5:get*=-1
elif not which:
l = 10**lim
if lim&1:get*=(-1**int(bool(get%l)))
return get
res = 0
for n in range(a,b+1):
res += d(n)
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) = 123456789 ,则
3456789 = [-123456789] 的最后七位
-3456789 =-
zwhe
发表于 2020-5-26 15:42:28
{:7_125:}
a873527356
发表于 2020-12-10 20:17:06
怎么做题?
qq1151985918
发表于 2021-2-4 00:14:11
。
qq1151985918
发表于 2021-6-21 16:05:58
{:9_241:}
一块钱赫赫
发表于 2021-8-9 10:21:46
找答案{:10_249:}
stefanie0511
发表于 2021-8-12 17:36:48
{:5_103:}