我已经制作了一个用于生成素数的筛子。我正在做一个关于 RSA 的学校项目,其中包括一些编程。我将在 RSA 系统中使用素数,但因为这是我的文章,所以安全性并不重要。然而,大素数更具挑战性,我喜欢这样。我使用的代码:
def Zeef(a):
import math
upperBound = a
upperBoundSquareRoot = int(math.sqrt(upperBound))
isPrime = [1 for m in range (0,upperBound+1)]
for m in range(2,upperBoundSquareRoot+1):
if (isPrime[m]==1):
for k in range(m*m,upperBound+1,m):
isPrime[k] = 0;
print("Priemgetallen : ")
numberofPrimes = 0
for m in range(2,upperBound+1):
if (isPrime[m] ==1):
print(m)
numberofPrimes = numberofPrimes+1
print("Aantal = " , numberofPrimes);
a=input("Alle priemgetallen tot: ")
aa=int(a)
Priemen = Zeef(aa)
我确信有一种更快的方法来生成素数,但我现在对改进我的代码并不感兴趣。
当我运行这个函数时,它可以很好地生成最多 7 位的素数,但是当我想要更多时,它真的很慢。我的电脑(8gb 内存)提示内存不足。我在另一个工具 Processing 中使用了相同的算法。处理速度非常快,但它不能识别超过 10 位数字。我还注意到,当我生成我的计算机能够计算的素数时,打印速度很慢。
我开始在互联网上搜索,我发现我编译我的程序会加快进度,但我不确定它是否加快了计算和打印部分或只是解释部分。我还发现了一些关于 numpy 的东西,它是关于数组的,但我不确定这是否会显着加快我的功能。
我怎样才能更快地找到我的素数?