等差素数列-

2,3,5,7,11,13,....是素数序列。
类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。
上边的数列公差为30,长度为6。
 
2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。
这是数论领域一项惊人的成果!
 
有这一理论为基础,请你借助手中的计算机,满怀信心地搜索:
 
长度为10的等差素数列,其公差最小值是多少?
 
注意:需要提交的是一个整数,不要填写任何多余的内容和说明文字。

分析:蓝桥杯省赛题,我的思路,利用素数筛选方法先将表处理出来,然后枚举公差值,求解这个数列的每一项是否都在素数表里面,看代码:

import java.util.*;      
public class Main{  
	static Scanner in = new Scanner(System.in);
	static int maxn = 10000;
    static boolean[] vis = new boolean[maxn];
    //打素数表
    static void  slove(){
    	for(int i = 1;i < maxn;i++ ){
    		 if(i%2==0) vis[i] = false;
    		  else vis[i] = true;
    		}
    	vis[2] = true;
    	for(int i = 3;i <= Math.sqrt(maxn);i+=2){
    		if(vis[i]){
    	      for(int j = i+i;j < maxn;j+=i){
    			vis[j] = false;
    		  }
    		}
    	}
    }
    public static void main(String[] args)  {  
      slove();
      int i,j,k;
      int max_cha = 100;
      for( i = 2; i<= max_cha;i++){//枚举差值,这个差一开始不确定,可以多测试几个数
    	 for( j = 2; j < maxn - (j+9*i) ;j++){//注意越界问题
    	  if(vis[j]){
    		   for(k = 1;k <= 9;k++)//依次判断等差数列的各项是否都在素数表里面
    			  if(!vis[j+k*i])
    				  break;
    		   if(k>9){//找到退出即可
    			   j = -1;break;
    			 }
    	      }
    	  }
    	  if(j==-1)
    		  break;
      }
      if(i <= max_cha)
          System.out.println(i);
      else
    	  System.out.println("NoAnswer");
    }  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值