素數距離問題,素數距離
/*
描述
現在給出你一些數,要求你寫出一個程序,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。
如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0
輸入
第一行給出測試數據組數N(0<N<=10000)
接下來的N行每行有一個整數M(0<M<1000000),
輸出
每行輸出兩個整數 A B.
其中A表示離相應測試數據最近的素數,B表示其間的距離。
樣例輸入
3
6
8
10
樣例輸出
5 1
7 1
11 1
00*00*/
/*
3
6
5 1
8
7 1
10
11 1
*/
#include <stdio.h>
#include "stdlib.h"
//判斷是否為素數
int isPrime(int num)
{
if (num==1) {
return 0;
}
for (int i=2; i*i<=num; i++) {
if (num%i==0) {
return 0;
}
}
return 1;
}
int main(int argc, const char * argv[]) {
// insert code here...
int n,num,numUp,numDown,deltUp,deltDown;
scanf("%d",&n);
while (n--) {
scanf("%d",&num);
if (isPrime(num)) {
printf("%d 0\n",num);
}else{
numUp=numDown=num;
while (!isPrime(numUp)) {
numUp+=1;
}
while (!isPrime(numDown)&&numDown>0) {
numDown-=1;
}
deltUp=numUp-num;
deltDown=num-numDown;
if (numDown==0) {
printf("%d %d\n",numUp,deltUp);
}else if (deltUp>=deltDown){
printf("%d %d\n",numDown,deltDown);
}else{
printf("%d %d\n",numUp,deltUp);
}
}
}
return 0;
}