这段代码是费马素因数的简单实现。 当我输入随机的13、14和15位整数来查找因子时,取决于输入值,它会产生错误的结果。
使用两个素数(7919(和10000以下素数的乘积进行单元测试。 它似乎运作良好。 但是,当我尝试使用13、14、15位数字的大整数时,取决于输入值,它会产生错误的结果。
def Prime_Factor(target):
a = int(math.sqrt(target))
b= a
while((a+b) <= target):
a = a + 1
b = math.sqrt(a**2 - target)
if((b % 1) == 0):
b = int(b)
print('a = ', a, ', b = ',b)
print('(a+b) = ,', (a+b), ', (a-b) = ', (a-b))
print('(a+b) * (a-b) = ', (a+b)*(a-b), end='')
if((a+b)*(a-b) == target):
print(' No Error Detected nn')
else:
print(' <> !=' , target, ' ERROR ******** nn')
exit
return
import math
Prime_Factor(9484756478341)
> Python 3.7.3 (default, Mar 27 2019, 17:13:21) [MSC v.1915 64 bit (AMD64)]
> Type "copyright", "credits" or "license" for more information.
> IPython 7.4.0 -- An enhanced Interactive Python.
> runfile('C:/Users/Paul/.spyder-py3/temp.py', wdir='C:/Users/Paul/.spyder- py3')
> a = 68579938 , b = 68510752
> (a+b) = , 137090690 , (a-b) = 69186
> (a+b) * (a-b) = 9484756478340 <> != 9484756478341 ERROR ********
谢谢大家的宝贵评论。 我已经研究并发现了一些用于 python 的大整数包,例如 gmpy2 等。 确实是被截断而死。 谢谢你的帮助。 干杯!