【问题标题】:How to let prime number print once in Python如何让素数在 Python 中打印一次
【发布时间】:2022-01-07 17:02:11
【问题描述】:

我的素数查找代码正在尝试所有数字,因此它会打印几次素数。例如:5/2、5/3、5/4。所以它会打印 5 次 3 次。

def prime_number_generator(num):
    for n in range (1,num):
        for prime in range (2,n):
            if (n%prime) ==0:
                break
            else:
                yield n

number = input('Please input the number:') 
if number.isnumeric():
    num = int(number)
    if num <= 2:
        print('Number must be greater than 2') 
    else: 
        for prime in prime_number_generator(num):
            print(prime, end=', ') 
else: 
    print('Must be a positive integer') 

输入为 27 的输出:

3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11,
 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 
15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 
17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 
19, 19, 21, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 
23, 23, 23, 23, 23, 23, 23, 23, 25, 25, 25,

【问题讨论】:

    标签: python primes


    【解决方案1】:

    这不是您唯一的问题。您还(错误地)将15 作为素数返回,因为如果不能除以 2(第二个for 循环的第一次迭代),您会立即假设该数字是素数。试试这个(注意else的缩进):

    def prime_number_generator(num):
        for n in range (2, num):
            for prime in range (2, n):
                if (n % prime) == 0:
                    break
            else:
                yield n
    

    请参阅this question,了解 Python 中 for..else 构造的说明。

    【讨论】:

      【解决方案2】:

      问题

      在这个函数中:

      def prime_number_generator(num):
          for n in range (1,num):
              for prime in range (2,n):
                  if (n%prime) ==0:
                      break
                  else:
                      yield n
      

      如果 n 不能被 prime 整除,则您将产生 n。以下是n = 5 时发生的示例:

      • 首先,prime = 2n % prime != 0,所以n,即5 产生
      • 然后,prime = 3n % prime != 0,所以 5 又一次成功了
      • 然后,prime = 4n % prime != 0,所以5 再次成功
      • 最后,prime = 5n % prime == 0,所以循环被打破了。

      然后用下一个n重复这个过程

      如何解决

      您可以从if 中删除else 子句,并将其添加到for 循环中。这意味着只有当for 循环没有被破坏时才会产生n,也就是说,只有当n 不能被2n - 1 之间的任何数字整除时才会产生。

      所以你可以像这样重写你的函数:

      def prime_number_generator(num):
          for n in range (1, num):
              for prime in range (2, n):
                  if (n % prime) == 0:
                      break
              else:
                  yield n
      

      【讨论】:

        猜你喜欢
        • 2017-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-22
        • 2018-11-27
        • 1970-01-01
        相关资源
        最近更新 更多