python 范围内质数的“生成器”

uqdfh47h  于 2023-01-24  发布在  Python
关注(0)|答案(3)|浏览(90)

有人请帮助我解决这个hackerrank的问题,我被困了几个星期了!我正在定义一个函数,它有2个参数。参数'num'是一个整数,是必须生成素数的范围,参数'瓦尔'包含0或1。但它有另一个条件:num“值为21的质数为-2 3 5 7 11 13 17 19
1.如果'val'的值为0,则生成以下值:3 7 13 19 [奇数索引值]
1.如果'瓦尔'为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
vohkndzv

vohkndzv1#

希望这能有所帮助:

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]
lymnna71

lymnna712#

如果要在生产环境中使用该算法,则应该使用更高效的算法来生成素数,但要使用目前所拥有的算法:

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
0ve6wy6x

0ve6wy6x3#

def主生成器(数值,瓦尔):#在此编写代码

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

相关问题