繁体   English   中英

输入大数并检查它是否是素数(Python)

[英]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 位数字时,它不再工作了。

这是示例运行: p = 17 和 q = 11

在这里我输入了一个大数字

在第二张图片上,当我输入一个大数字时,它不会继续。 我试着等了半个小时,看看它是否有效,但它仍然存在,就是这样。 为什么会这样?

这需要很长时间,因为你循环了很多数字,每个数字直到你的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM