查找质数直到一个数字
Posted
技术标签:
【中文标题】查找质数直到一个数字【英文标题】:Finding prime numbers up till a number 【发布时间】:2021-10-31 18:47:40 【问题描述】:我正在尝试列出所有素数,直到一个特定的数字,例如1000. 随着数字的增加,代码变慢。我很确定这是因为所有prime_factors都检查了(数字-1)的for循环。需要一些建议我可以如何减少更大数字的代码处理时间。谢谢
import time
t0 = time.time()
prime_list = [2]
number = 0
is_not_prime = 0
count = 0
while number < 1000:
print(number)
for i in range (2,number):
count = 0
if (number%i) == 0:
is_not_prime = 1
if is_not_prime == 1:
for j in range (0,len(prime_list)):
if(number-1)%prime_list[j] != 0:
count += 1
if count == len(prime_list):
prime_list.append(number-1)
is_not_prime = 0
count = 0
break
number += 1
print(prime_list)
t1 = time.time()
total = t1-t0
print(total)
【问题讨论】:
在数学中,sieve of Eratosthenes 是一种古老的算法,用于查找不超过任何给定限制的所有素数。 这有帮助吗:***.com/questions/2068372/… ? 感谢这真的有帮助 【参考方案1】:除了令人困惑之外,您的解决方案效率非常低 - O(n^3)。请使用埃拉托色尼筛。另外,学习如何使用布尔值。
类似的东西(不是最佳的,只是一个模型)。本质上,您从所有数字的列表开始,1-1000。然后,你删除那些是某物的倍数。
amount = 1000
numbers = range(1, amount)
i = 1
while i < len(numbers):
n = i + 1
while n < len(numbers):
if numbers[n] % numbers[i] == 0:
numbers.pop(n)
else:
n += 1
i += 1
print(numbers)
最后,我能够回答是因为您的问题不是特定于语言的,但请用您在示例中使用的语言标记问题。
【讨论】:
是的,那是我的第一次尝试.. 编码的第三天。顺便说一句,它的蟒蛇。无论如何,我试图理解 Eratosthenes 的 Sieve 并编写了与您刚刚解释的逻辑非常相似的代码:t_in = time.time() number_list = [] number = 1 while number<100000: number += 1 number_list.append(number) i = 2 while i < number: for j in number_list: if(j%i)==0: if(j!=i): number_list.remove(j) i += 1 t_out = time.time() total = t_out-t_in print(total, number_list)
那么您现在需要什么帮助?
什么都没有。谢谢:)
好的。如果它回答了问题,您可以将其标记为已接受。以上是关于查找质数直到一个数字的主要内容,如果未能解决你的问题,请参考以下文章