您的位置:首页 > 其它

素数距离问题

2016-05-12 13:05 344 查看

素数距离问题

时间限制: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


import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int num = input.nextInt();
for (int i = 0;i<num;i++) {
int number = input.nextInt();
if (isPrimer(number)) {
System.out.println(number+" "+0);
} else {
int up = getUpNum(number);
int down = getDownNum(number);
if ( (Math.abs(up-number)) > Math.abs(number-down)){
System.out.println(down+" "+Math.abs(down-number));
} else if ( (Math.abs(up-number)) == Math.abs(number-down)){
System.out.println(down+" "+Math.abs(down-number));
} else {
System.out.println(up+" "+Math.abs(up-number));
}
}

}

}
static int getUpNum(int n){//获得最近的素数
int index = 0;
for (int i = n;;i++) {
if (isPrimer(i)) {
index = i;
break;
}
}

return index;
}
static int getDownNum(int n){//获得最近的素数
int index = 0;
for (int i = n;i>0;i--) {
if (isPrimer(i)) {
index = i;
break;
}
}

return index;
}

static boolean isPrimer(int number){
for (int i = 2;i<=Math.sqrt(number);i++) {
if (number % i == 0) {
return false;
}
}
return true;
}

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: