a^17+b^17=c^17,在python中相对误差最小

2024-10-02 08:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我们如何在python中计算a,b,c a^17+b^17=c^17,a和b值介于100和10000之间的a^17+b^17和c^17之间的最小相对误差?你知道吗

amin,bmin=100,100
minerr=1.
for a in range(100,10001):
    for b in range(a+1,10001):
        c17=a**17+b**17
        sqc17=int(pow(c17,1./17.))
        err=float(abs(c17-sqc17**17))/float(sqc17)
        if err<minerr:
            minerr=err
            amin,bmin=a,b
print(amin,bmin,minerr)

我的解决方案是坏的,因为低精度的浮动 我怎样才能改进这个


Tags: inforifrangeabsfloatinterr
1条回答
网友
1楼 · 发布于 2024-10-02 08:22:21

对于a<bc=b+k可以

a^17 = (b+k)^17-b^17 = 17*k*b^16 + 8*17*k^2*b^15 + ...

它告诉我们a的有效选择大约在(17*k/b)^(1/17)*b左右,这将合理的a的选择减少了17倍。从而将循环更改为

minerr = 1.0
amin = 100; bmin = 100;

for b in range(100, 1000+1):
    for c in range(b+1, 2*b):
        a = int(round( (c**17-b**17)**(1.0/17) )
        if a > b: break;
        relerr = abs( (1-(a**17+b**17)/float(c**17) )
        if relerr < minerr:
           print a,b,c,relerr
           amin=a; bmin=b; minerr=relerr

跑得比较快,有输出

 91 100 101 0.014295850232
 95 100 102 0.0127684524838
 91 101 102 0.0104995591939
 92 102 103 0.00622204374651
 93 103 104 0.00197150095955
 100 106 108 0.00195817126477
 107 108 112 0.00104974944998
 99 110 111 0.000393678252529
 139 158 159 3.78426050378e-05
 166 168 174 3.0425791517e-05
 186 190 196 1.5711666417e-05
 298 312 319 3.40065617555e-06
 318 323 334 1.40781743518e-06
 389 452 454 1.40251765757e-06
 543 628 631 6.18935889096e-07
 594 691 694 2.35972024587e-07
 815 993 995 5.41414728605e-08

相关问题 更多 >

    热门问题