使用生成器

  • isPrime函数判断一个数是不是素数

  • prime是一个素数生成器

  • main函数的功能是,判断一个数可以由多少对素数之和组成

  • 算法:对素数生成器中的数,去判断差值是否是素数

  • 需要改进:判断差值是否是素数,直接判断差值是否在生成器中最好了,但是最同一个生成器判断两次会导致终止。。
    todo!

  • 思路2,当要求的数不太大的时候,我们可以直接用列表保存起来。此时求所有的素数有一个更好的算法:
    如果一个数不被其前面所有的素数整除,那么它就是素数
    所以我们可以一边算一遍更新素数列表

def isPrime(num):
    rem=1
    for x in range(2,num):
        rem*=num%x
    if rem!=0:
        return True
def prime(n):
    num=1
    while num<=n:
        if isPrime(num):
            yield (num)
        num+=1       
def func(x):
    global pairs
    remain=inputX-x
    if remain in gen2:
        print('remain is %d' %remain)
        pairs+=1
if __name__=='__main__':
    inputX=int(input('input a number: '))
    gen=prime(inputX)
    # gen2=prime(inputX)
    # for xx in gen2:
    #     print(xx)
    pairs=0
    for x in gen:
        #print('prime %d:'%x)
        remain=inputX-x
        if isPrime(remain):
            #print('remain is %d' %remain)
            if(x<=inputX/2):
                pairs+=1
    print(pairs)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容