【发布时间】:2021-08-31 16:41:56
【问题描述】:
我正在寻找 GCD(最大公分母)为 1 的一对数,即序列 X0、X1、... XN 的前 N 项都是合数。
对于我的代码,由于某种原因,它在 i == 15、j == 878 和 k == 78 时卡住了。 对列表中的最后两个项目运行 is_prime() 时,它会卡住。
import math
def is_prime(num):
if num < 2:
return False
for x in range(2, math.floor(math.sqrt(num)) + 1):
if num % x == 0:
return False
return True
# create list containing a range of composite numbers
numbers = []
for i in range(4, 200):
if not is_prime(i):
numbers.append(i)
for i in numbers:
found = False
for j in numbers:
if math.gcd(i, j) == 1:
# print(i, "-", j, end=" | ")
fibonacci = [i, j]
contains_prime = False
for k in range(2, 500):
if is_prime(fibonacci[-2] + fibonacci[-1]):
contains_prime = True
break
else:
fibonacci = [fibonacci[-1], fibonacci[-2] + fibonacci[-1]]
if not contains_prime:
print(i, j)
found = True
if found:
break
if found:
break
if i == numbers[-1]:
print("No Possibilities Exist.")
【问题讨论】:
-
卡住了,因为您要检查的数字非常大,而大数字需要真的很长时间才能分解。
-
也许看看使用更好的主要功能。
-
试除法是最简单和最弱的素性测试算法,因为对于大数来说是最慢的,你需要更高级的算法,例如 Miller-Rabin 或 Baillie-PSW 素性测试
-
您的代码在测试 51452069511074530979 是否为质数时卡住了,这是一个用试除法测试的大得离谱的数字(它的平方根是 7173009794)