首页 > 解决方案 > 单元测试似乎工作......但某些超过 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 \n\n')
                else:
                    print('  <> !=' , target, '  ERROR ********   \n\n')
                    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

解决方案


谢谢大家的宝贵意见。我已经研究并发现了一些用于 python 的大整数包,例如 gmpy2 等。确实会因截断而死亡。谢谢您的帮助。干杯!


推荐阅读