素数距离问题
时间限制:3000 ms | 内存限制:65535 KB
难度:2
- 描述
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0- 输入
- 第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000), 输出 - 每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。 样例输入 -
3 6 8 10
样例输出 -
5 1 7 1 11 1
- 第一行给出测试数据组数N(0<N<=10000)
JAVA代码:
/** 搜索最小素数距离,优先级分析:* 1、判断输入的是否为素数,是素数输出* 2、判断左侧最近素数* 3、判断右侧最近素数* * 特例需注意,数字1不是素数* */
package org.oj;import java.util.Scanner;
public class Main {//判断素数private boolean is_prime(int x){if(x>1){if(x<4){ // 2,3 素数return true;}else{for(int i=2;i<=Math.sqrt(x);i+=1){if(x%i==0) return false;}return true;}}return false;}public static void main(String[] args) {Scanner scan=new Scanner(System.in);Main nyoj=new Main();int n=scan.nextInt(); //组数for(int i=0;i<n;i++){int m=scan.nextInt();if(m<0) break;if(nyoj.is_prime(m)){System.out.println(m+" "+0); continue;}// 距离int d=(m%2==0)?1:0; //特例:1 不是素数if(m==1){System.out.println("2 1");}else{while(true){int min=m-d;int max=m+d;if(nyoj.is_prime(min)){System.out.println(min+" "+d); break;}else{if(nyoj.is_prime(max)){System.out.println(max+" "+d); break;}} d+=2;}}}scan.close(); }
}