Prime Palindrome逻辑效率

时间:2013-04-16 19:58:29

标签: c palindrome

我写了一个代码,以获得前1000个主要的回文,虽然我的逻辑是正确的,我似乎没有获得前1000个主要回文,我得到了一些113 Prime Palindromes,之后我没有得到任何。我认为这是因为我的逻辑不够有效,这就是为什么它需要花费很多时间来编译,但我已经尝试了三种不同的方法,并且每次Runtime在第113次Prime Palindrome数字之后都会被卡住。

任何人都可以解释为什么我会遇到这个问题,是因为代码效率不高吗?

/* Program to find the first 1000 prime palindromes */

#include<stdio.h>
#include<math.h>


int prime(long int n)
{
    int i,check=0;

    if(n!=2 && n%2==0)
        return 0;

    if(n==2 || n==3)
        return 1;

    for(i=3;i<n/2;i=i+2)
        if(n%i==0)
        check++;

    if(check==0)
      return 1;
    else
    return 0;
}

/*long int reverse_number(long int n,long int partial)
{
if(n==0)
    return partial;
else
    return reverse_number(n/10,partial*10 + n%10);
}*/

int palindrome(long int n)
{
    long int reverse = 0;
    long int n_copy = n;
    int rem;
    while(n_copy!=0)
    {
    rem = n_copy%10;
    reverse = reverse*10;
    reverse = reverse + rem;
    n_copy = n_copy/10;
    }

    if(reverse==n)
    return 1;
    else
    return 0;

} 


int main()
{
    long int i;
    int count=5,digits;


    printf("The 1000 prime palindromes are: \n");
    printf("1. 2\n2. 3\n3. 5\n4. 7\n");

    for(i=11;;i=i+2)
    {
        if(prime(i))
        {
            if(palindrome(i))
            {
                printf("%d. %ld\n",count,i);
                count++;
            }
            /*if(reverse_number(i,0)==i)
            {
            printf("%d. %ld\n",count,i);
            count++;

            }*/

        }
        if(count==50)
          break;
    }



    printf("\n\n");

    return 0;

}

1 个答案:

答案 0 :(得分:4)

让我在这里引用我的命令式编程教授:“你可以检查这个数字是否是一个素数和一个回文,或检查它是否是一个回文和一个素数......”

另外,当break为50时,你count循环,我想你想在1000时做这个。

在不修改primepalindrome函数的情况下,除了调用它们的顺序外,我的电脑在781 9989899之后停止查找更多内容。