优化“回文质数“程序的思维过程”
最原始的思路:
分别设计判断回文数和质数的函数,再在主函数中调用。
int prime(int m);
int huiwenshu(iny m);
int main()
{
int a,b,i;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
{
if(prime(i)==1&&huiwenshu(i)==1)
printf("%d",i);
}
}
这样显然对于所取范围内的每一个数,都要进行两次运算,才能得出答案。太过繁琐,严重超时。
然后我就想到了下一种思路:
在for循环里用if语句,先判断质数,如果是质数再进行回文数的判断。
这样所取范围内的每一个数,合数只进行一次运算,质数进行两次。能减少一定运算量,但对于1到100,000,000这样大的范围来说还是微不足道的。
后来我就在想怎么能从1到100,000,000这个集合中直接去掉一些明显不符合要求的数?比如除2以外偶数,比如除5以外5的倍数?如果能把这些数都抛掉,运算一下能减少一半以上。
这个时候,我发现了“剪枝算法”,于是