- 主题:转个题:1到100中找10个数使其倒数和为1
在整数1到100中找10个不同的数,使其倒数和为1。求所有的解。
10个数只是顺序不同的话,视为相同的解。
--
FROM 123.119.160.*
【 在 z16166 的大作中提到: 】
: 在整数1到100中找10个不同的数,使其倒数和为1。求所有的解。
: 10个数只是顺序不同的话,视为相同的解。
这个如果暴力求解,效率很低啊
--
修改:snoopyzhao FROM 117.152.203.*
FROM 117.152.203.*
想办法限制搜索空间
【 在 snoopyzhao 的大作中提到: 】
:
: 这个如果暴力求解,效率很低啊
--
FROM 123.119.160.*
这玩意儿叫埃及分数,能搜到一些结果。算是个数论问题,我怀疑有很细的结论。
【 在 z16166 的大作中提到: 】
: 在整数1到100中找10个不同的数,使其倒数和为1。求所有的解。
:
: 10个数只是顺序不同的话,视为相同的解。
: ...................
--
FROM 124.64.18.*
穷举,第一个数>x的时候退出(1/x + 1/(x+1) + 1/(x+9) < 1)
我能想到也就这样了
再优化的话,有些地方可能可以从遍历改成二分?
要是浮点数除法慢就改成乘法算倒数
【 在 z16166 的大作中提到: 】
: 在整数1到100中找10个不同的数,使其倒数和为1。求所有的解。
: 10个数只是顺序不同的话,视为相同的解。
--
FROM 103.102.203.212
【 在 z16166 的大作中提到: 】
: 想办法限制搜索空间
假定这十个数a, ..., j是从小到大排列的,其中 a>=2,然后这10个数的和应该大于100……
这对于搜索出1...100范围内的解好像帮助也不是很大
--
FROM 117.152.203.*
埃及分数不限制拆分的个数
【 在 milksea 的大作中提到: 】
: 这玩意儿叫埃及分数,能搜到一些结果。算是个数论问题,我怀疑有很细的结论。
--
FROM 123.119.160.*
有人用python加jit,直接暴力穷举通分后的大整数等式,说是很快
【 在 snoopyzhao 的大作中提到: 】
:
: 假定这十个数a, ..., j是从小到大排列的,其中 a>=2,然后这10个数的和应该大于100……
: 这对于搜索出1...100范围内的解好像帮助也不是很大
--
FROM 123.119.160.*
是要严格等于1还是一定精度范围内?
严格相等的话光是验证就挺费事的
【 在 z16166 的大作中提到: 】
: 有人用python加jit,直接暴力穷举通分后的大整数等式,说是很快
:
--
FROM 106.112.242.*
肯定是严格相等,也就是手动纸笔去验算,也能验算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.*