- 主题:转个题:1到100中找10个数使其倒数和为1
在整数1到100中找10个不同的数,使其倒数和为1。求所有的解。
10个数只是顺序不同的话,视为相同的解。
--
FROM 123.119.160.*
想办法限制搜索空间
【 在 snoopyzhao 的大作中提到: 】
:
: 这个如果暴力求解,效率很低啊
--
FROM 123.119.160.*
埃及分数不限制拆分的个数
【 在 milksea 的大作中提到: 】
: 这玩意儿叫埃及分数,能搜到一些结果。算是个数论问题,我怀疑有很细的结论。
--
FROM 123.119.160.*
有人用python加jit,直接暴力穷举通分后的大整数等式,说是很快
【 在 snoopyzhao 的大作中提到: 】
:
: 假定这十个数a, ..., j是从小到大排列的,其中 a>=2,然后这10个数的和应该大于100……
: 这对于搜索出1...100范围内的解好像帮助也不是很大
--
FROM 123.119.160.*
肯定是严格相等,也就是手动纸笔去验算,也能验算OK。
from numba import jit
num_max = 101
print ('test')
@jit
def foo():
s=0
for a in range(2,num_max):
for b in range(a+1,num_max):
#print(a,b)
for c in range(b+1,num_max):
for d in range(c+1,num_max):
for e in range(d+1,num_max):
for f in range(e+1,num_max):
for g in range(f+1,num_max):
for h in range(g+1,num_max):
for i in range(h+1,num_max):
for j in range(i+1,num_max):
if a*b*c*d*e*f*g*h*i*j== b*c*d*e*f*g*h*i*j+ \
a* c*d*e*f*g*h*i*j+ \
a*b* d*e*f*g*h*i*j+ \
a*b*c* e*f*g*h*i*j+ \
a*b*c*d* f*g*h*i*j+ \
a*b*c*d*e* g*h*i*j+ \
a*b*c*d*e*f* h*i*j+ \
a*b*c*d*e*f*g* i*j+ \
a*b*c*d*e*f*g*h* j+ \
a*b*c*d*e*f*g*h*i:
s +=1
print(s,a,b,c,d,e,f,g,h,i,j)
foo()
【 在 tiewuzi 的大作中提到: 】
: 是要严格等于1还是一定精度范围内?
: 严格相等的话光是验证就挺费事的
:
--
修改:z16166 FROM 123.119.160.*
FROM 123.119.160.*
69014是对的
用浮点计算的?
【 在 foliver 的大作中提到: 】
: 直接暴力搜索,简单的利用数学不等式限制了每个数的范围。
: 在我的6代IntelU的笔记本上,单核跑了30秒左右(C++)。
: ALL count = 69014,ITERS Num = 1915408207,Time=27328 ms
: ...................
--
FROM 123.119.160.*
你的限定条件不等式,是怎样的?
【 在 foliver 的大作中提到: 】
: double足以。求和校验eps用1.0e-14
: 实际上可以根本不用求和验证。因为最后一个数是计算出来。
: --来自微微水木3.5.14
--
FROM 123.119.160.*
应该是的。不过浮点数如果条件没写好的话,可能算得不对,需要校验解是否正确。
我刚改了个用uint64_t计算的,5800 X3D上耗时25秒多。
想自己算的可以先不看提示:github /z16166/ReciprocalSearch/
【 在 milksea 的大作中提到: 】
: 其实浮点计算量可能比整数乘法少
--
FROM 123.119.160.*
那差不多,所以都是20多秒
加上17、18楼两位说的,不知道可以再加速到多少,有时间可以玩一下
【 在 foliver 的大作中提到: 】
: 其实100误导了大家。题目扩展一下,从所有自然数中取出10个不同的数字,使它们的倒数和为1,有多少中取法?
: 假定10个数字x1,x2..,x10递增
: x1显然只能在2..10
: ...................
--
FROM 123.119.160.*
牛
按19光滑的话,有些组合是固定的,比如19的倍数38、76、95这三个必须同时出现,因为只有这三个通分后的分子能约掉19
【 在 milksea 的大作中提到: 】
: 代码大概如附件,应该用不到 1 秒。
: 组合生成用多重循环挺蠢的,不过挺有效。
:
--
FROM 123.119.160.*