请大家帮我优化下程序执行的效率我想了好久
题目要求是要输入一个a到b的范围(5<=a<b<=1000000000)输出所有在这范围内的回文素数(即这个数既是回文数又是素数)我编的程序如下(用code blocks编的)虽然结果正确但是效率太低 大家能帮我想想更高效的方法吗?谢谢了(最好解释下 我是初学者)#include <stdio.h>
#include <math.h>
#include "mymath.h"/*自定义的头文件*/
int main()
{
long int a, b, i, prime, Palindrome;
printf("please input the range of the integer\nplease use space to separate\n");/*提示用户输入2个数字*/
scanf("%ld %ld", &a , &b);/*输入所求回文素数的范围*/
if (a % 2 == 0)
a++;
for (i = a; i <= b; i = i + 2)/*从a到b依次对数字进行检验*/
{
Palindrome = HuiWen(i);/*把prime倒过来写*/
if (Palindrome == i)/*判断i是否为回文数*/
{
prime = SuShu(i);/*若i是素数则赋值给prime*/
if (prime != 0)/*判断是否为素数*/
printf("%ld\n", prime);/*输出回文素数*/
}
}
return 0;
}
头文件是:
#ifndef MYMATH_H_INCLUDED
#define MYMATH_H_INCLUDED
/*函数功能: 判断给定的数是否为素数
函数参数入口: 长整型x
返回值:若x的是素数则为x,若x不是素数则为0 */
long int SuShu(long int x)
{
long int count = 0, n, q;
q = sqrt(x);
if (x != 2 && x % 2 != 0)
{
for (n = 3; n <= q; n += 2)
{
if (x % n == 0)
goto there;
}
}
else
goto there;
return x;
there :
return 0;
count = 0;
}
/*函数功能: 把输入的数字从右往左输出
函数参数入口: 长整型n
函数返回值: 对应从右往左的数的值*/
long int HuiWen(long int n)
{
long int right = 0, left = n;
while (left> 0)
{
right = right * 10 + left % 10;
left /= 10;
}
return right;
}
#endif // MYMATH_H_INCLUDED