首先,引入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