你如何使用 python 找到前 x 个素数?

How do you find the first x prime numbers using python?

def xPrimes(x) :
  y = 2
  while y < x :
      if isItPrime(y) == True :
        y += 1
      y += 1
  print(primes)

我是 python 的初学者,我无法让程序执行所需的操作。我也不完全了解我的程序的作用。当我执行 xPrimes(5) 时,它给了我 [2,3,5] 而不是 [2,3,5,7,11]。我的代码打印所有素数 UP to x 而不是 x 素数。我怀疑我需要一个计数器,但我不知道在哪里实现它。

您只需要不断生成素数,直到您拥有 x 个素数。如果您要返回结果列表,您的计数器就是该列表的长度。

def xPrimes(x: int) -> List[int]:
    primes: List[int] = []
    y = 1
    while(len(primes) < x):
        y += 1
        if isItPrime(y):
            primes.append(y)
    return primes

请注意,y 是质数,x 是质数的个数,它们是完全 不同的数。 :)

什么是素数?

您必须将 x 视为计数器并且不要与 y 进行比较,因为 y 是质数而不是计数器

相反,您可以这样做

def xPrimes(x) :
  y = 2
  index = 0
  while index < x :
      if isItPrime(y) == True :
        y += 1
        index+= 1
      y += 1
  print(primes)

你可以看到,我使用索引作为计数器并在我得到素数时递增它

家庭作业是一次冒险和实验的机会!

首先,您问为什么 xPrimes(5) 最多给您 5。当 y < x 时您停止循环,y 每次都上升。这表明您可以通过使用小变量名来迷失方向。您可以通过重命名来使您的代码看起来像这样:

def primes_up_to_number(stop_at) :
  testing_number = 2
  while testing_number < stop_at :
      if isItPrime(testing_number) == True :
        testing_number += 1
      testing_number += 1
  print(primes)

这让我感到困惑,因为您无法获得输出 [2, 3, 5]。当 testing_number 为 2 时,您将其加一,然后在再次检查 isItPrime 之前再次加一,检查 4。我假设 isItPrime 更新了一些全局数组 primes

我认为您想将代码和含义从 stop_at 更改为 number_of_primes。如果是这样,您应该在函数开始时设置一个计数器 number_of_primes_found = 0 并在每次找到素数时加一。您应该更改 while 循环中的表达式以继续循环,直到找到该数量的素数。

祝你有美好的一天!继续编码!做笔记。