单元测试似乎有效...但是某些超过 13 位的大整数输入失败



这段代码是费马素因数的简单实现。 当我输入随机的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 等。 确实是被截断而死。 谢谢你的帮助。 干杯!

最新更新