python - 单元测试似乎工作......但某些超过 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 的大整数包,例如 gmpy2 等。确实会因截断而死亡。谢谢您的帮助。干杯!
推荐阅读
- node.js - 使用 Ingress 服务类型将“express-gateway”部署到 Google Kubernetes Engine 时出现问题
- mysql - 无法使用 mysql 客户端从 docker 主机连接到作为 docker 容器运行的 Mysql 5.7
- python-2.7 - Bittrex REST API v3,Python POST 订单,INVALID_CONTENT_HASH
- strapi - 如何在 Strapi 3.0.1v 中设置电子邮件提供商?
- html - CF 循环遍历本地目录中的图像并以 HTML 显示
- java - Java leetcode 问题 Array Vs ArrayList 120.triangle
- typescript - 编译器将意外工件添加到构建文件夹
- c# - c# 中有没有办法隐式地扩展对接口的多个实现的调用?
- amazon-web-services - 适用于 AWS 的 Terraform:如何在对象路径上过滤每个 S3 存储桶的多个事件?
- r - curl::curl_fetch_memory(url, handle = handle) 中的 API 请求和错误:SSL 证书问题:证书已过期