Python练习(15)-中

问题描述

等差素数数列
类似7、37、67、97、107、137、167、197,这样由素数组成的数列叫做等差素数数列。素数数列具有项数的限制,一般指素数数列的项数有多少个连续项,最多可以存在多少个连续项。
编程找出100以内的等差素数数列。

分析:
先构造素数判断函数,并找出100以内所有素数;
遍历所有素数ai,再内循环找到接线来的素数aj,判断ak=2aj-ai 是否是素数
若是,则再判断ak加上等差是否仍是素数,依此循环
用列表存储符合条件的等差序列,并输出

代码

#构造素数判断函数
import math
def sushu(n):             
    for k in range(2,int(math.sqrt(n)+1)):
        if n%k==0:
            return False
    return True
    
#将100以内的素数放入列表
Sushu=[]
for i in range(2,100):
    if sushu(i):
        Sushu.append(i)
print len(Sushu)

#
for i in range(len(Sushu)-2):   #遍历列表,以 ai 作为等差数列的首项
    for j in range(i+1,len(Sushu)):   #以aj 作为中间项
        a3=2*Sushu[j]-Sushu[i]   #求出第三项
        s=[Sushu[i],Sushu[j]]
        while a3<100 and sushu(a3):   #若满足条件
            s.append(a3)
            a3+=Sushu[j]-Sushu[i]   #则继续判断下一项
            if len(s)>2:     # s长度大于2是数列输出的条件
                print s
#结果
[3, 5, 7]
[3, 7, 11]
[3, 11, 19]
[3, 13, 23]
[3, 17, 31]
[3, 23, 43]
[3, 31, 59]
[3, 37, 71]
[3, 41, 79]
....

总结:
*

以上代码是借鉴了其他人的,自己开始想的时候,思绪混乱,还想着要不要从1. 2 3 …这样慢慢加上去,忘记了等差数列的性质:a3=2*a2-a1,急于下手,分析的不够透彻。每一个程序都是基于对题意的理解,要对题目背后的意义进行思考和挖掘,再动手写。

猜你喜欢

转载自blog.csdn.net/qq_43243022/article/details/83002850