您的位置:首页 > 其它

ACM练习—素数距离问题

2015-05-15 23:10 316 查看


素数距离问题

时间限制: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) throws Exception{
Scanner s = new Scanner(System.in);
int sum = s.nextInt();
int[] num = new int[sum];  // 存放数据数组
for (int i = 0; i < sum; i++) {
num[i] = s.nextInt();
}

int i;
int j;
boolean b=true;
for (i = 0; i < num.length; i++) {
for (j = 2; j < num[i]; j++) {
if(num[i]%j==0){    // 如果能被其中的数整除 证明不是素数
break;
}
}
if(j==num[i]){    // 如果i 循环到 num[i] 还未找到能整除的数, 证明是素数
System.out.println(num[i] + " 0");
}else{
int R = 0,L = 0;
int k;
int k2;
for (k = num[i]-1; k >= 2; k--) {

for (k2 = 2; k2 < k; k2++) {
if (k%k2==0) {  	  // 如果不是素数
break;
}
}

if(k2==k){    			 // 如果是素数
R = num[i]-k;
break;
}
}
int l;
int l2;

for (l = num[i]; l < 12; l++) {
for (l2 = 2; l2 < l; l2++) {
if(l%l2==0){
break;           // 如果能整除
}
}

if(l2 == l){
L = l - num[i];
break;
}
}
if(L>R){
System.out.println(k + " "+ R);
}else if(R>L){
System.out.println(l + " "+ L);
}else{
System.out.println(k + " "+ R);
}

}
}

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