1. 程式人生 > >藍橋杯:求一個5位數的最大迴圈素數

藍橋杯:求一個5位數的最大迴圈素數


1193是個素數,對它迴圈移位後發現:1931,9311,3119也都是素數,這樣特徵的數叫:迴圈素數。

你能找出具有這樣特徵的5位數的迴圈素數嗎?當然,這樣的數字可能有很多,請寫出其中最大的一個。

注意:答案是個5位數,不要填寫任何多餘的內容。

#include<stdio.h>
#include<math.h>
//判斷是否是素數
int isPrime(int n)
{
	int flag=1;
	for(int i=2;i<=sqrt(n);i++)
	{
		if(n%i==0)
		{
			flag=0;
			break;
		}
	}
	return flag;
}
//數字迴圈
int fun(int n)
{
	int a = n%10;//取出最後一位  比如12345得出a=5 
	int b = n/10;//取出前面4位                b=1234
	return a*10000+b; //經典的迴圈返回, 5*10000+1234=51234
} 
int main()
{
	int i,j;//i代表需要求的數字,從99999到10000,j代表數字需要迴圈5次 
	int count;
	int temp; 
	for(i=99999;i>=10000;i--)//在所有的5位數中從最大開始找起 
	{	
		temp = i;
		count = 0;//切記要在這裡把count的值賦為0,千萬別在外面賦值,因為每次求一個數字i它的count值都要變為0不然的花就會求得99971是結果 
		for(j=0;j<5;j++)//因為5位數的話就要迴圈5次 
		{
			if(isPrime(temp))
			{
				//printf("%d\t",temp);//錯誤,因為有些素數迴圈2、3次後就不是素數了,就不應該輸出,O(∩_∩)O 
				count++;
				temp=fun(temp);//呼叫fun函式,實現迴圈的判斷是否還是素數 
			}
		}
		if(count==5)//如果迴圈5次那可以確定5次都是素數了 
		{
			printf("\n%d\n",i);
			break;//找到了就跳出迴圈,結束 
		}
	}
	return 0;
}