Java用筛子法求素数

描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0

 
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         int T;
 6         Scanner scanner=new Scanner(System.in);
 7         int number;
 8         int result;
 9         int distance;
10         int temp;
11         int N=1000010;
12         int flag[]=new int[N];
13         int i;
14         int j;
15         
16         for(i=0;i<N;i++)
17             flag[i]=0;
18         
19         flag[0]=1;
20         flag[1]=1;
21         
22         for(i=2;i*i<N;i++){
23             if(flag[i]==0){
24                 for(j=i*i;j<N;j+=i)
25                     flag[j]=1;
26             }
27         }
28         
29         T=scanner.nextInt();
30         while(true){
31             if(T==0)
32                 break;
33             T--;
34             
35             number=scanner.nextInt();
36             
37             if(number==1){
38                 System.out.println("2 1");
39                 continue;
40             }
41             
42             temp=number;
43             while(true){
44                 if(flag[temp]==0){
45                     result=temp;
46                     distance=number-temp;
47                     break;
48                 }
49                 temp--;
50             }
51             
52             temp=number;
53             while(true){
54                 if(flag[temp]==0){
55                     if(temp-number<distance){
56                         result=temp;
57                         distance=temp-number;
58                     }
59                     break;
60                 }
61                 temp++;
62             }
63             
64             System.out.println(result+" "+distance);
65         }
66     }
67 }

 

 
posted @ 2014-11-29 02:13  zqxLonely  阅读(819)  评论(0编辑  收藏  举报