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);

}

}

}
展开
 我来答
紫薇参星
科技发烧友

2016-05-10 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3510万
展开全部

你的程序我帮你改好了,把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

826010478
2016-05-10 · TA获得超过521个赞
知道小有建树答主
回答量:920
采纳率:53%
帮助的人:284万
展开全部
解题思路:首先m给出了具体范围,所以你要先求出这个范围内的所有素数并且存入类似hashset的结构(方便查找),求出所有素数的方法请自行百度On级别的。
然后每输入一个数字就进行查找,查找方式也很简单就是依次+1和-1就可以。我估计这个做法应该不会超时,如果超时就采用二分查找。数据结构改为使用数组存储上述的全部素数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式