Python3素数错误答案产生为什么这段代码给我错误的素数因子,比如9,21,。。。。。。。?

Python3素数错误答案产生为什么这段代码给我错误的素数因子,比如9,21,。。。。。。。?,python,yield,prime-factoring,Python,Yield,Prime Factoring,这是您的代码的正确版本-在确定一个数字不是素数之前,您需要检查所有可能的因素-只要有一个数字没有被除,您就可以生成该值 primef = [] def i_prime(n) : count = 0 for i in range ( 0, n ): for j in range ( 2, i ): if (not i % j == 0): yield i count += 1

这是您的代码的正确版本-在确定一个数字不是素数之前,您需要检查所有可能的因素-只要有一个数字没有被除,您就可以
生成该值

primef = []
def i_prime(n) :
    count = 0
    for i in range ( 0, n ):
        for j in range ( 2, i ):
            if (not i % j == 0):
                yield i
                count += 1
            else:
                break


for i in i_prime(45):
    primef.append(i)
primefe = list(set(primef))
print(primefe)

你的逻辑似乎有缺陷。你所做的基本上是一个奇数发生器(想想为什么)。既然已经回答了这一部分,下面是一些提示:

  • 我不建议使用这种算法来生成素数,因为它 效率低下。您也可以缓存所有生成的素数 列表中的数字,并且只检查该列表,而不是
    适用于范围(2,i)内的j:
  • 有一种更有效的方法可以通过 利用数论中的一个事实,即所有素数 大于3的数字的形式为
    6k+1
    6k+5
    ,其中k是一个整数,出于实际目的,它是非负的(后面的解释相当简单)。 下面是我在解决项目问题时编写的一段代码:
  • def是素数(x:int)->bool:
    如果x1
    如果x%2==0或x%3==0:
    返回错误
    i=5
    而i*i
    primef=list(i_prime(45))
    primef = []
    def i_prime(n) :
        for i in range ( 0, n ):
            for j in range ( 2, i ):
                if (i % j == 0):
                    break
            else:
                yield i
    
    
    for i in i_prime(45):
        primef.append(i)
    print(primef)
    
    def is_prime(x: int) -> bool:
        if x <= 3:
            return x > 1
        elif x % 2 == 0 or x % 3 == 0:
            return False    
        
        i = 5
        while i*i <= x:
            if x % i == 0 or x % (i + 2) == 0:
                return False
            i = i + 6
        
        return True