nyoj 24 素數距離問題

                                                 <pre name="code" class="cpp">#include <stdio.h>
#include <math.h>
int ss(int n)
{
	int i;
    if(n==1||n==0)
		return 0;
    for(i=2;i<=sqrt(n);i++)//用這種方法節省時間 
		if(n%i==0)
			return 0;
		return 1;
}
int main()
{
	int m,n,i;
    scanf("%d",&m);
    while(m--){
		scanf("%d",&n);                                                                                                                                                                                                                                        
		
		for(i=0;;i++)//此處沒有界限 下方程序控制自行退出
		{
			if(ss(n-i)==1)//n-i若不是質數 程序向下執行 判斷n+i
			{
				printf("%d %d\n",n-i,i);
				break;
			}
			else if(ss(n+i)==1)
			{
				printf("%d %d\n",n+i,i);
				break;
			}
		}                                                                                                                                                                                                                                                                                                       
	}
	return 0;
}
        

這是運行通過的代碼 其實有一個代碼 也能得到正確結果 卻超時了 下方會給出 可做對比參考

<pre name="code" class="html">#include <stdio.h>
int main()
{
	int k,m,n,l,p,x;
	scanf("%d",&k);
	while(k--)
	{
		int i,j;
		scanf("%d",&m);
		for(j=m;j>=2;j--)
		{
			for(i=2;i<=j;i++)
			{
				if(j%i==0)
					break;
			}
			if(j==i)
			{
				n=j;
				p=m-j;
				break;
			}
			
		}
		for(j=m+1;j<=10000;j++)
		{
			for(i=2;i<=j;i++)
			{
				if(j%i==0)
					break;
			}
			if(j==i)
			{
				l=j;
				x=j-m;
				break;
			}
			
		}
		if(p<=x)
			printf("%d %d\n",n,p);
		else
		{
			printf("%d %d\n",l,x);
		}
	}
	return 0;
}
<strong>
</strong>

素數距離問題

時間限制: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
來源
經典題目
上傳者
hzyqazasdf



發佈了41 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章