藍橋杯:求一個5位數的最大迴圈素數
阿新 • • 發佈:2019-01-27
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; }