[英]Inputting large numbers and check if it is prime (Python)
我正在使用 python 制作一个程序,其中它检查大数是否是素数。 (这是用于 RSA 加密)
这是我的代码:
p = int(input("Enter first prime number: "))
while(1):
if isPrime(p) is False:
print("%d is not a prime number!" % p)
p = int(input("Please enter first prime number again: "))
else:
print("%d is a prime number." % p)
break
q = int(input("Enter second prime number: "))
while(1):
if isPrime(q) is False:
print("%d is not a prime number!" % q)
q = int(input("Please enter second prime number again: "))
else:
print("%d is a prime number." % q)
break
p 是第一个大数,q 是第二个大数。
这是检查它是否是素数的 function:
def isPrime(num):
if num > 1:
for i in range(2, num):
if(num % i) == 0:
return False
else:
return True
else:
return False
我尝试使用像 17 和 11 这样的小数字运行它,它可以工作,但是当我尝试输入一个 16 位数字时,它不再工作了。
在第二张图片上,当我输入一个大数字时,它不会继续。 我试着等了半个小时,看看它是否有效,但它仍然存在,就是这样。 为什么会这样?
这需要很长时间,因为你循环了很多数字,每个数字直到你的 16 位数字,这是很多循环迭代。 即使你每次迭代只做持续的工作,通过这么多数字仍然需要一段时间。 python 中的循环非常慢。 幸运的是,您可以像这样使用sympy
:
from sympy.ntheory import factorint
def isPrime(n):
return len(factorint(n)) == 1
然后事情应该会进展得更快。 以供参考:
factorint(133453565475464563453)
花了大约半秒钟
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.