素數距離問題
時間限制: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
- 第一行給出測試數據組數N(0<N<=10000)
JAVA代碼:
/** 搜索最小素數距離,優先級分析:* 1、判斷輸入的是否為素數,是素數輸出* 2、判斷左側最近素數* 3、判斷右側最近素數* * 特例需注意,數字1不是素數* */
package org.oj;import java.util.Scanner;
public class Main {//判斷素數private boolean is_prime(int x){if(x>1){if(x<4){ // 2,3 素數return true;}else{for(int i=2;i<=Math.sqrt(x);i+=1){if(x%i==0) return false;}return true;}}return false;}public static void main(String[] args) {Scanner scan=new Scanner(System.in);Main nyoj=new Main();int n=scan.nextInt(); //組數for(int i=0;i<n;i++){int m=scan.nextInt();if(m<0) break;if(nyoj.is_prime(m)){System.out.println(m+" "+0); continue;}// 距離int d=(m%2==0)?1:0; //特例:1 不是素數if(m==1){System.out.println("2 1");}else{while(true){int min=m-d;int max=m+d;if(nyoj.is_prime(min)){System.out.println(min+" "+d); break;}else{if(nyoj.is_prime(max)){System.out.println(max+" "+d); break;}} d+=2;}}}scan.close(); }
}