1. 程式人生 > >NYOJ 素數 最近距離問題

NYOJ 素數 最近距離問題

素數距離問題

時間限制: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;
}