素數距離問題
時間限制: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
個人理解:先寫一個函數判斷輸入的是否爲素數,然後根據題目的要求,首先組別非負,利用if,else,else if寫出可能出現的三種情況,從而得到我們想要的結果.
結果 |
時間 |
內存 |
語言 |
Accepted |
80 |
240 |
C |
#include<stdio.h>
int yy(int(n))
{
int i;
if(n==1)return 0;
for( i=2;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int m,n,A,B,C,D;
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
if(yy(n))
printf("%d 0\n",n);
else{
A=B=n;
while(!yy(A))
{
A=A+1;
}
while(!yy(B))
{
B=B-1;
}
C=A-n;
D=n-B;
if(B==0)
{
printf("%d %d\n",A,C);
}
else if(C>=D)
printf("%d %d\n",B,D);
else
printf("%d %d\n",A,C);
}
}
return 0;
}