等差素数序列

懵懂的女人 提交于 2019-12-03 12:06:51

等差素数数列

问题描述

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

 算法思路

  1. 使用筛法找出100内的素数,存在素数表prime中
  2. 在prime中找出任意两数构成素数等差数列的a0,a1
  3. 计算出a2,判断其是否为素数,如果是则加入素数等差数列的列表s中

 代码示例

Python

pt = [True] * 1000  # 筛表

def isPrime(n):
    if pt[n]:
        for x in range(n ** 2, len(pt), n):
            pt[x] = False
        return True
    else:
        return False

# 1. 构建素数表
prime = []  # 素数表
for x in range(2, 101):
    if isPrime(x):
        prime.append(x)
# print(prime)

# 2. 任取prime中的两个数作为a0,a1
for i in range(len(prime)):
    for j in range(i + 1, len(prime)):
        a0, a1 = prime[i], prime[j]
        d = a1 - a0  # 公差
        an = a1 + d
        s = []  # 用来存放等差素数数列
        while an < 100 and isPrime(an):
            s.append(an)
            an += d
        if s:
            print([a0,a1]+s)


Java

import java.util.ArrayList;
import java.util.List;

public class 等差素数数列 {

    static boolean[] pt;

    static boolean isPrime(int n) {
        if (pt[n]) {
            for (int i = n * n; i < pt.length; i += n) {
                pt[i] = false;
            }
            return true;
        } else {
            return false;
        }
    }

    static void init() {
        pt = new boolean[1000];
        for (int i = 0; i < pt.length; i++) {
            pt[i] = true;
        }
    }

    public static void main(String[] args) {
        init();

        List<Integer> prime = new ArrayList<>();
        for (int i = 2; i < 101; i++) {
            if (isPrime(i)) {
                prime.add(i);
            }
        }

        for (int i = 0; i < prime.size(); i++) {
            for (int j = i + 1; j < prime.size(); j++) {
                List<Integer> s = new ArrayList<>(); // s用来存放等差数列
                int a0 = prime.get(i);
                int a1 = prime.get(j);
                s.add(a0);
                s.add(a1);
                int d = a1 - a0; // 公差
                int an = a1 + d;
                while (an < 100 && isPrime(an)) {
                    s.add(an);
                    an += d;
                }
                if (s.size() > 2) {
                    System.out.println(s);
                }
            }
        }

    }

}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!