我有一个hackkerank编码挑战,要打印前n个非素数,我有工作代码,但是问题是,他们有一个锁定代码,该代码将输出从1到n的数字与输出一起打印,以便通过测试我只需要打印非质数而不是1 ... n数字。我无法评论1 ... n的打印部分,因为它已被阻止。请让我知道仅打印1st n个非质数的想法:
这是我的解决方法:
def manipulate_generator(generator, n):
if n>1:
ls=[1]
for elm in generator:
if elm>3 and len(ls)<n:
for k in range(2,elm):
if elm%k==0 and elm not in ls:
ls.append(elm)
print(elm)
if len(ls)==n:
return ls
那是我添加的代码,但是这是被锁定的代码,我必须编写上面的代码以使其一次打印出第一位
def positive_integers_generator():
n = 1
while True:
x = yield n
if x is not None:
n = x
else:
n += 1
k = int(input())
g = positive_integers_generator()
for _ in range(k):
n = next(g)
print(n)
manipulate_generator(g, n)
关键点是_的范围(k):已经打印出包含不希望打印出的数字的数字:这是我想要的输出类型:n = 10我希望将其打印出: 输出:
1
4
6
8
9
10
12
14
15
16
我无法更改此代码,但是上面的代码是我写的,可以更改...请帮帮我...谢谢您期待
答案 0 :(得分:0)
您可以打印从1到第一个素数的所有数字,然后从第一个素数到下一个素数,直到达到n。
答案 1 :(得分:0)
我不确定您的hackerrank情况如何,但是可以通过这种方式有效地打印前N个非素数数字。
def non_prime_numbers_till_n(n):
primes = set()
for num in range(2,number + 1):
if num > 1:
for i in range(2, math.sqrt(num)):
if (num % i) == 0:
break
else:
primes.add(num)
result = []
for i in range(1, n):
if i not in primes:
result.append(i)
return result
根据在线编辑的期望,您可以打印它们,或将它们存储在列表中并返回列表。
请记住,您最多只能检查数字的平方,以确定其是否为素数。
答案 2 :(得分:0)
我最终想出了这个答案,我相信应该可以解决,但请在那里找到答案;一种更好的解决方法,请添加答案:
def manipulate_generator(generator, n):
for num in range(3,100000):
for q in range(2,num):
if num%q==0 and num>n:
generator.send(num-1)
return
此链接python generator帮助我了解python生成器
答案 3 :(得分:0)
为什么不扔掉我们不需要的数字?看看我实现的这个解决方案...
def is_prime(n):
for i in range(2, n):
if n%i == 0:
return False
return True
def manipulate_generator(generator, n):
if is_prime(n+1):
next(generator)
manipulate_generator(generator, n+1)
注意:我了解可以改进逻辑以使其更有效。但是,跳过不必要的数字打印的想法在这里很重要!
答案 4 :(得分:0)
我刚刚解决了这个问题。就像Swapnil Godse所说的那样,您需要处理所有特殊情况以优化计算。该链接可能会有所帮助:click here.
这是解决方案:
from math import sqrt
def is_prime(n):
if (n <= 1):
return False
if (n == 2):
return True
if (n % 2 == 0):
return False
i = 3
while i <= sqrt(n):
if n % i == 0:
return False
i = i + 2
return True
def manipulate_generator(g, n):
if is_prime(n+1):
next(g)
manipulate_generator(g, n+1)