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*iprimef=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