Python 使用next()方法在给定列表的元素上循环到一定数量
我想得到自然数n在2和n之间(对于n是一个大数)的不同素数因子的数目。为此,我想首先创建一个素数列表。然后,为了得到n的不同素数因子的列表,检查列表中的素数,直到n的平方根除以n。如果素数除以n,则检查列表中的下一个 这就是我所尝试的:Python 使用next()方法在给定列表的元素上循环到一定数量,python,algorithm,Python,Algorithm,我想得到自然数n在2和n之间(对于n是一个大数)的不同素数因子的数目。为此,我想首先创建一个素数列表。然后,为了得到n的不同素数因子的列表,检查列表中的素数,直到n的平方根除以n。如果素数除以n,则检查列表中的下一个 这就是我所尝试的: def prime_eratosthenes(n): not_primes = [] for i in range(2, n+1): if i not in not_primes: #print (i)
def prime_eratosthenes(n):
not_primes = []
for i in range(2, n+1):
if i not in not_primes:
#print (i)
for j in range(i*i, n+1, i):
not_primes.append(j)
return [item for item in range(2,n) if item not in set(not_primes)]
n=100
L = prime_eratosthenes(n)
def num_primefactors(n):
prime_div=[]
x=L[0]
while x*x<=n:
if n%x==0:
n=n//x
prime_div.append(x)
x=next(L)
return len(prime_div)
num_primefactors(14)
def prime_eratosthenes(n):
非素数=[]
对于范围(2,n+1)内的i:
如果我不在not_素数中:
#印刷品(一)
对于范围内的j(i*i,n+1,i):
非素数。附加(j)
return[如果项目不在集合中,则范围(2,n)内项目的项目(非\u primes)]
n=100
L=素数(n)
def num_primefactors(n):
prime_div=[]
x=L[0]
而x*x
请注意,用于。。。在L
中,在L
上构造一个迭代器。没有必要创建和安装自己的工具
下面是循环的重建,执行“手动”迭代:
prime_stream = iter(L)
factor = next(prime_stream)
while factor * factor <= n:
if n % factor == 0:
prime_div.append(factor)
n //= factor
factor = next(prime_stream, n+1) # Ensures loop exit when we run out of primes
return len(prime_div)
prime\u-stream=iter(L)
系数=下一个(基本流)
而因子*因子
请注意,用于。。。在L
中,在L
上构造一个迭代器。没有必要创建和安装自己的工具
下面是循环的重建,执行“手动”迭代:
prime_stream = iter(L)
factor = next(prime_stream)
while factor * factor <= n:
if n % factor == 0:
prime_div.append(factor)
n //= factor
factor = next(prime_stream, n+1) # Ensures loop exit when we run out of primes
return len(prime_div)
prime\u-stream=iter(L)
系数=下一个(基本流)
而factor*factor没有列表的next()
。您的方法返回整个列表。只需使用for
循环来迭代元素。列表中没有next()
。您的方法返回整个列表。只需使用for
循环来迭代元素。谢谢。。。我的术语不好。“in L”提供了迭代器。谢谢。。。我的术语不好。“in L”提供迭代器。
prime_stream = iter(L)
factor = next(prime_stream)
while factor * factor <= n:
if n % factor == 0:
prime_div.append(factor)
n //= factor
factor = next(prime_stream, n+1) # Ensures loop exit when we run out of primes
return len(prime_div)