python实现超级素数的查找

首先,引入python的数学工具包:

import math

然后定义素数查找函数,思路很简单,就是分情况判断并且在根号n之下的整数找到可能的除数使得数字被整除。

def isprime(n):#定义判断素数的函数
    if n==1:
        return False
    for i in range(2,int(math.sqrt(n))+1):
        if n % i ==0:
            return False
    return True

接着就是根据三位数和四位数的情况进行分类解决咯,也很简单,对于100-9999的数字,三位数的百位数的取值只能是1-9,十位数和个位数的取值就是0-9。同样的四位数的千位数取值是1-9,其他位数将是0-9.

我们用列表来接受各个超级素数(不要忘记初始化)

tri_list=[]#初始化三位数列表
four_list=[]#初始化四位数列表

下面进行三位数超级素数的判断:

for triple_a in range(1,10):
    for triple_b in range(0,10):
        for triple_c in range(0,10):
            if isprime(100 * triple_a + 10 * triple_b + triple_c) and isprime(10 * triple_a + triple_b) and isprime(triple_a):
                tri_list.append(100 * triple_a + 10 * triple_b + triple_c)#add numbers to tri

紧接着进行四位超级素数的判断:

for four_a in range(1,10):
    for four_b in range(0,10):
        for four_c in range(0,10):
            for four_d in range(0,10):
                if isprime(1000*four_a+100*four_b+10*four_c+four_d) and isprime(100*four_a+10*four_b+four_c) and isprime(10*four_a+four_b) and isprime(four_a):
                    four_list.append(1000*four_a+100*four_b+10*four_c+four_d)#add numbers to four

最后合并数组并且统计范围内超级素数的个数并且进行求和

final_list=tri_list+four_list
print(final_list)
print(len(final_list))
print(sum(final_list))

最后可以得到结果:

[233, 239, 293, 311, 313, 317, 373, 379, 593, 599, 719, 733, 739, 797, 2333, 2339, 2393, 2399, 2939, 3119, 3137, 3733, 3739, 3793, 3797, 5939, 7193, 7331, 7333, 7393]
30
75548

你可能感兴趣的:(python,程序人生)