您的位置:首页 > 其它

NYOJ 24 素数距离问题

2014-09-29 17:23 323 查看

素数距离问题

[align=center]时间限制:3000 ms | 内存限制:65535 KB[/align]
[align=center]难度:2[/align]
描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。

如果输入的整数本身就是素数,则输出该素数本身,距离输出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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: