NYOJ 素數 最近距離問題
阿新 • • 發佈:2018-12-24
素數距離問題
時間限制: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
#include<stdio.h> int isPrime(int n)//判斷素數 { int i; if(n<2) return 0; for(i=2;i*i<=n;i++) if(n%i==0) return 0; return 1; } int main() { int T,len,m; scanf("%d",&T); while(T--)//由m向兩邊擴散查詢最小距離的素數 { scanf("%d",&m); len=0; while(1) { if(m-len>1&&isPrime(m-len))//優先查詢左邊的,要保證左邊大於1 {printf("%d %d\n",m-len,len);break;} else if(isPrime(m+len)) {printf("%d %d\n",m+len,len);break;} len++; } } return 0; }