描述
现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。
如果输入的整数本身就是素数,则输出该素数本身,距离输出0
输入
第一行给出测试数据组数N(0<N<=10000)
接下来的N行每行有一个整数M(0<M<1000000),
输出
每行输出两个整数 A B.
其中A表示离相应测试数据最近的素数,B表示其间的距离。
样例输入
3
6
8
10
样例输出
5 1
7 1
11 1

来源
经典题目
上传者
hzyqazasdf
关于这道题目,很多人都会去考虑怎么去得到两边的素数值,怎么去判断两边的素数。
博主的方法就是利用递归的方法两边跑,两边去判断

import java.util.Scanner;       
public class Main {    
    public static void main(String args[]){  
           Scanner scan=new Scanner(System.in);
           int n=Integer.parseInt(scan.nextLine());
           while(n!=0){
                int num=scan.nextInt();
                if(num<=2)
                    System.out.println("2 "+(2-num));
                else if(isPrime(num))//先判断该数字是不是素数,如果是就返回true,如果不是则false;
                    System.out.println(num+" 0");
                else{
                    int big=add(num);
                    int small=plubs(num);
                    if(big-num<num-small)//这里就是比较左边跟右边的素数相距原来的数字距离有多大
                        System.out.println(big+" "+(big-num));
                    else if(big-num>=num-small)
                        System.out.println(small+" "+(num-small));                    
                }                   
               n--;                   
           }
    }    
       public static boolean isPrime(int n){//判断是否为素数的方法
           if (n == 3)
            return true;      
        else
           for(int i=2;i<=Math.sqrt(n);i++){
               if(n%i == 0)
                   return false;
            }
       return true;
    }
       public static int add(int num){//向右边跑,不断验证右边的数字,直到是素数为止
           for(int i=2;i<=Math.sqrt(num);i++){
               if(num%i==0){
                   num++;//如果他不是素数,就+1,继续往右边跑
                   return add(num);  //利用递归的方法                   
               }
                            
           }
           return num;
       }
       public static int plubs(int num){//向左边跑,不断验证左边的数字,直到是素数为止
           for(int i=2;i<=Math.sqrt(num);i++){
               if(num%i==0){
                   num--;//如果他不是素数,就-1,继续往左边跑
                   return plubs(num);      //利用递归的方法   
               }                               
           }
           return num;
       } 
}    
AI生成项目
java
运行


有个很重要的问题有些人可能没发现。
就是当你输入数据为小于2的数的时候,问题就出现了
1它不是素数,所以呢,就要两边去找,0肯定不是,所以就找到了2,然后2距离1的位置是1
所以当你输入1的时候,输出的就必须为   2   1

if(num<=2)//num是输入的数字
                    System.out.println("2 "+(2-num));
AI生成项目
java
运行
这条语句,就是判断数字小于2的时候作出的处理
————————————————

更多推荐