簡體   English   中英

范圍內質數的“生成器”[關閉]

[英]'Generator' for Prime numbers in a range [closed]

有人請幫我解決這個 hackerrank 問題,我已經被困了好幾個星期了。 我正在定義一個 function,它有 2 個 arguments,參數“num”是一個 integer,是必須生成素數的范圍。 並且參數“val”包含 0 或 1:但它有另一個條件:“num”值 21 的素數是 - 2 3 5 7 11 13 17 19

  1. 如果 'val' 的值為 0,則產生值:3 7 13 19 [奇數索引值]
  2. 如果 'val' 為 1,則屈服值應為:2 5 11 17 [偶數索引值]

我試過下面的代碼

def primenum(num, val):
    for i in range(3-val,num):
        if(i > 2):          
            for j in range(2,i):
                if(i%j == 0):
                    break
                else:
                    yield i

希望這有助於:

def primenum(num, val):
    primes = []
    for i in range(2, num):
        for j in range(2, int(i / 2) + 1):
            if i % j == 0:
                break
        else:
            primes.append(i)
        
    for i in range(1 - val, len(primes), 2):
        yield primes[i]

prime1 = list(primenum(21, 0)) # [3, 7, 13, 19]
prime2 = list(primenum(21, 1)) # [2, 5, 11, 17]

如果這將在生產環境中使用,您應該使用更有效的算法來生成素數,但目前為止:

def primenum(num,val):
    prime_count = 0
    for test_number in range(2,n):
        has_prime_factor = False
        for comparison in range(2,test_number):
            if test_number % comparison == 0:
                has_prime_factor = True
                break
        if not has_prime_factor:
            prime_count += 1
            if prime_count % 2 == val:
                yield test_number

def primegenerator(num, val): # 在這里寫你的代碼

for i in range(2,num):
    for j in range(2,i//2+1):
        if i%j == 0:
            break
    else:
        if val == 1:
            yield i
            val -= 1
        else:
            val +=1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM