素数的距离问题
时间限制: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
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();
}
}
版权声明:本文博主原创文章,博客,未经同意不得转载。