优化性能 - 写出质数

  • 本文关键字:性能 优化 python
  • 更新时间 :
  • 英文 :


问题是质数- 解决方案没有有效实施。

我听说过埃拉托色尼筛

还有

哪些其他方法可以实现素数 - 以更有效的方式?

n = int(input())
suma = 0
m = 0
while m < n:
if n > 100000:
break
x = int(input())
if 1 < x < 10000:
for i in range(x):
if x % (i + 1) == 0:
suma += 1
if suma == 2 and x != 2:
m += 1
print('o')
suma = 0
else:
m += 1
print('x')
suma = 0

解决方案之一:https://medium.com/@dhruvpatel1057/generate-prime-numbers-in-python-using-segmented-sieve-of-eratosthenes-245b79da6687

你正在使用一种非常幼稚的方法来进行素数检查。

作为一个一般幼稚但不那么多的方法,我建议使用威尔逊定理作为素数检查器。使用math.factorial而不是 python 循环应该可以为您提供一些合理的速度提升,同时保持代码相当简单。

我听说过埃拉托色尼筛 - 但不知道如何实现它。

这不是埃拉托色尼本身的筛子,但人们在提到它时通常会谈论的是,当你找到一个素数时,你会遍历所有候选者并删除其因素("筛选"它们,因此得名(,新的第一个候选者是序列中的下一个素数。

不过,有比筛选所有东西更有效的素数测试,请查看"素数测试"维基百科页面以获取示例。

此代码将生成用户请求的质数数量。它非常有效,可以在毫秒内计算出前一千个素数。

amount = int(input("Enter the amount of prime numbers you would like to see: "))
primes = []
num = 1
while len(primes) < amount:
num += 1

# If num is bigger than 1, and is 2 or is odd, and when divided by all the number from 3 to num's square root plus 1 (excluding even numbers), there is always a remainder.
if num > 1 and (num == 2 or num % 2 != 0) and all(num % divisor != 0 for divisor in range(3, int(num ** 0.5) + 1, 2)):
primes.append(num)

print(f"The first {amount} prime numbers are:n{primes}")

这是示例代码,列出素数,并从此列表中检查要处理的数字是否被除,如果没有被除,那么它是素数,否则不是

# your code goes here
x = int(input())
prime =[]
for i in range(2,x):
if i not in prime:
if prime == []:
prime.append(i)
else:
check = 1
for j in prime:
if i%j==0:
check = 0 
break
if check:
prime.append(i)
print(prime)

相关内容

  • 没有找到相关文章

最新更新