java acm的素数距离问题
描述现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。如果输入的整数本身就是素数,则...
描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1
我写的程序为什么2 3 4 5 6 7都可以 但就是类似于9,15等左右要个移动一下的数字就无法显示但是如果把k改成0类似于9,15的数就可以了但是 6 8 这类的数就又无法得出了……求大神赐教
代码:
import java.util.Scanner;
class sushu{
public void sushu(int num){
boolean l = false;
boolean h = false;
boolean g = false;
int k=1;
int t = 0;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
l = true;
}
}
if (l) {
while (k++<num) {
t = k * (-1);
num = num + t;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
h = true;
}
}
if (h) {
num = num - 2 * t;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
g = true;
}
}
if (g) {
k++;continue;
} else
System.out.println(num + " " + (k));
break;
} else
System.out.println(num + " " + (k));
break;
}
} else
System.out.println(num + " 0");
}
}
public class Main {
public static void main(String[] args) {
Scanner a = new Scanner(System.in);
sushu A=new sushu();
int n=a.nextInt();
for(int i=0;i<n;i++){
int num=a.nextInt();
A.sushu(num);
}
}
} 展开
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1
我写的程序为什么2 3 4 5 6 7都可以 但就是类似于9,15等左右要个移动一下的数字就无法显示但是如果把k改成0类似于9,15的数就可以了但是 6 8 这类的数就又无法得出了……求大神赐教
代码:
import java.util.Scanner;
class sushu{
public void sushu(int num){
boolean l = false;
boolean h = false;
boolean g = false;
int k=1;
int t = 0;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
l = true;
}
}
if (l) {
while (k++<num) {
t = k * (-1);
num = num + t;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
h = true;
}
}
if (h) {
num = num - 2 * t;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
g = true;
}
}
if (g) {
k++;continue;
} else
System.out.println(num + " " + (k));
break;
} else
System.out.println(num + " " + (k));
break;
}
} else
System.out.println(num + " 0");
}
}
public class Main {
public static void main(String[] args) {
Scanner a = new Scanner(System.in);
sushu A=new sushu();
int n=a.nextInt();
for(int i=0;i<n;i++){
int num=a.nextInt();
A.sushu(num);
}
}
} 展开
2个回答
展开全部
你的程序我帮你改好了,把boolean h = false;和boolean g = false;移动了位置
把num变量换成了m和n变量,你看看吧.运行没问题了.
完整的Java程序如下:
import java.util.Scanner;
class sushu{
public void sushu(int num){
boolean l = false;
int k=1;
int t = 0;
for (int i = 2; i < num; i++) {
if (num % i == 0) {
l = true;
}
}
if (l) {
while (k<num) {
int n=num;
int m=num;
boolean h = false;
n= n-k;
for (int i = 2; i < n; i++) {
if (n % i == 0) {
h = true;
}
}
if (h) {
boolean g = false;
m = m + k;
for (int i = 2; i < m; i++) {
if (m % i == 0) {
g = true;
}
}
if (g) {
k++;
continue;
} else
System.out.println(m + " " + (k));
break;
} else
System.out.println(n + " " + (k));
break;
}
} else
System.out.println(num + " 0");
}
}
public class Main {
public static void main(String[] args) {
Scanner a = new Scanner(System.in);
sushu A=new sushu();
int n=a.nextInt();
for(int i=0;i<n;i++){
int num=a.nextInt();
A.sushu(num);
}
}
}
运行结果:
3
9
7 2
15
13 2
27
29 2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询