这道题蛋疼的地方在于有很多地方要做优化,要求很严格,一个地方优化不好就超时了。
1 #include <iostream> 2 #include <cmath> 3 #include <math.h> 4 using namespace std; 5 6 #define MAX 10000005 7 bool prime[MAX]; 8 int res[MAX]; 9 10 int main() 11 { 12 int a,b,count; 13 int i,j,k; 14 int num,temp; 15 bool flag; 16 17 for(i=2;i<MAX;i++) 18 prime[i] = true; 19 20 for(i=2;i<sqrt(MAX);i++) //优化1:从MAX的平方根开始计算 21 if(prime[i]) 22 for(j=i;i*j<MAX;j++) //优化2:从i^2开始计算 23 prime[i*j] = false; 24 25 count = 0; 26 for(i=2;i<MAX;i++) 27 { 28 num = i; 29 temp = 0; 30 while(num) 31 { 32 temp = temp*10 + num%10; 33 num = num/10; 34 } 35 if(temp==i && prime[i]) //优化3:用另外一个数组来储存结果,否则下面输出结果的时候会浪费很多时间在不符合条件的数上 36 res[++count] = i; 37 } 38 39 cin>>a>>b; 40 while(!(a==0&&b==0)) 41 { 42 for(i=0;res[i]<a;i++) 43 ; 44 for(;res[i]<=b && res[i]!=0;i++) 45 cout<<res[i]<<endl; 46 cin>>a>>b; 47 } 48 return 0; 49 }