[英]Python print non-prime numbers
我有一個 hackkerank 編碼挑戰來打印前 n 個非素數,我有工作代碼,但問題是他們有一個鎖定的代碼,它打印從 1 到 n 的數字以及 output,為了通過我需要的測試只打印非素數而不是 1...n 數字。 我無法評論 1...n 的打印部分,因為它被阻止了。 請讓我知道只打印第一個 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)
關鍵是 for _ in range(k): 已經打印出數字,其中包括我不想打印出來的數字:這是我想要的 output 的類型:對於 n=10 我希望它打印出來:output:
1
4
6
8
9
10
12
14
15
16
我無法更改此代碼,但上面的代碼是我寫的並且可以更改...請幫助我...謝謝期待
為什么不扔掉我們不需要的數字? 看看我實施的這個解決方案......
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)
注意:我知道可以改進邏輯以使其更有效率。 但是,跳過不必要的數字打印的想法在這里很重要!
您可以打印從 1 到第一個素數的所有數字,然后從第一個數字到下一個數字,直到達到 n。
我不確定您的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
根據您的在線編輯器的期望,您可以打印它們,或將它們存儲在列表中並返回列表。
還要記住,您只能檢查數字的 sqrt 以確定它是否是素數。
我最終想出了這個答案,我認為應該可以解決它,但在那里找到了答案;解決它的更好方法請添加您的答案:
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 生成器幫助我理解了 python 生成器
我現在剛剛解決了這個問題。 就像 Swapnil Godse 所說,您需要處理所有特殊情況以優化計算。 此鏈接可能會有所幫助: 單擊此處。
這是解決方案:
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)
prime = int(input('Please enter the range: '))
prime_number = []
for num in range(prime):
if num > 1:
for i in range(2,num):
if num % i == 0:
break
else:
prime_number.append(num)
print(f'Prime numbers in range {prime} is {prime_number}')
all_number = []
for i in range(2,prime+1):
all_number.append(i)
Non_prime_number = []
for element in all_number:
if element not in prime_number:
Non_prime_number.append(element)
print(f'Non Prime numbers in range {prime} is {Non_prime_number}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.