zoukankan      html  css  js  c++  java
  • 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 }
     
  • 相关阅读:
    0x02 枚举、模拟、递推
    0x01 位运算
    bzoj3529: [Sdoi2014]数表
    bzoj5216: [Lydsy2017省队十连测]公路建设
    POJ1789Truck History
    最小生成树模板
    POJ1258Agri-Net
    POJ1860Currency Exchange(SPFA)
    POJ3083Children of the Candy Corn
    POJ2503Babelfish
  • 原文地址:https://www.cnblogs.com/zqxLonely/p/4129752.html
Copyright © 2011-2022 走看看