返回题解分享
讨论 / 题解分享/ 帖子详情

等差素数列(结果填空) - 题解

public class SuShu {
    public static void main(String[] args) {
        /*
        * 思路:
        * 先把10万以内的素数找出来;
        * 然后挨个遍历,以每一个素数为开头的等差数列,
        * 暴力遍历所有的差值1000以内即可
        * 然后统计等差数列的长度,达到10就保存差值,全局保存最小的那个。
        * 最后输出即可
        * */
        int n =1000100;
        //埃氏筛晒出n以内的所有素数
        boolean[] numbers = new boolean[n+1];
        for (int i =2 ; i <= n;i++) {
            if(!numbers[i]){
                int temp = i+i;
                while(temp<=n){
                    numbers[temp] = true;
                    temp +=i;
                }
            }
        }
        
        //以k为开头的等差数列
        int min = Integer.MAX_VALUE;
        for (int k =2 ; k <= n; k++) {
            if(!numbers[k]){//是素数才进行计算
                for (int i =3; i <= 10000; i++) {//遍历所有的差值
                    int count = 0;//统计等差数量长度
                    int temp = k;
                    while (temp<=n&&!numbers[temp]){
                        temp +=i;
                        count++;
                        if(count==10){
                            min = Math.min(min,i);
                        }
                    }
                }
            }
        }
        System.out.println(min);

    }
}
0 回复 0 转发 0 喜欢 4 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!