暴力解方程

查看 118|回复 11
作者:dig2000   
$x^2+y^2=19451945$
[Python] 纯文本查看 复制代码for i in range(4410):
        m = (19451945-i*i)**0.5
        if m == int(m):
                print(i,int(m))
下面的最简代码,只需一行:
[Python] 纯文本查看 复制代码print([x for x in range(4410) if (19451945-x*x)**0.5-int((19451945-x*x)**0.5)== 0])
看看谁还能精简这个代码

代码, 方程

beichen1031   


sin2019 发表于 2025-5-27 17:45
他其实是想把19451945转换成根号的形式,然后这个就转换成圆的方程x平方+y平方=圆面积,但是4410其实不是 ...

取到4410的话,答案是重复的
[Bash shell] 纯文本查看 复制代码>>> for i in range(4410):
...         m = (19451945-i*i)**0.5
...         if m == int(m):
...                 print(i,int(m))
...
256 4403
344 4397
581 4372
1252 4229
2363 3724
2437 3676
2632 3539
3088 3149
3149 3088
3539 2632
3676 2437
3724 2363
4229 1252
4372 581
4397 344
4403 256
,取3119答案是唯一的
[Bash shell] 纯文本查看 复制代码>>> for i in range(3119):
...         m = (19451945-i*i)**0.5
...         if m == int(m):
...                 print(i,int(m))
...
256 4403
344 4397
581 4372
1252 4229
2363 3724
2437 3676
2632 3539
3088 3149
>>>
所以我问为啥取4410
beichen1031   

4410怎么来的,好奇
[Bash shell] 纯文本查看 复制代码>>> import math
>>>
>>> r = 19451945
>>> max_x = math.isqrt(r // 2)  # 假设x=y,2x^2=r
>>> print(max_x)
3118
>>>
>>> for x in range(max_x+1):
...     y = (r - x**2)**0.5
...     if y == int(y):
...         print(x, int(y))
...
256 4403
344 4397
581 4372
1252 4229
2363 3724
2437 3676
2632 3539
3088 3149
>>>
IT大小白   

求解,4410是怎了确认的?
dig2000
OP
  


IT大小白 发表于 2025-5-27 13:31
求解,4410是怎了确认的?

$\sqrt{19451945}$
愚无尽   


IT大小白 发表于 2025-5-27 13:31
求解,4410是怎了确认的?

他回答你估计你还是有点晕。就是勾股定理
yamatagit   

几何代数。。。。
JackieZQ   

试试这个
print([x for x in range(4410) if ((19451945 - x*x)**0.5).is_integer()])
dig2000
OP
  


JackieZQ 发表于 2025-5-27 15:19
试试这个
print([x for x in range(4410) if ((19451945 - x*x)**0.5).is_integer()])

good job!
dysunb   

这个可真是有点暴力
您需要登录后才可以回帖 登录 | 立即注册

返回顶部