C 37号工程

C 37号工程,c,C,以下是问题陈述: 3797这个数字有一个有趣的特性。作为素数本身,可以从左到右连续删除数字,并在每个阶段保持素数:3797、797、97和7。类似地,我们可以从右到左工作:3797、379、37和3 求从左到右和从右到左都可截断的十一个素数之和 注:2、3、5和7不被视为可截断素数 我的代码提供了部分输出。11个必需的素数中只有5或6个被输出,3797不是其中之一。因此,为了找到错误,我手动(在一张纸上)运行了3797的代码,但不知何故无法找到故障 我认为错误在第二部分,代码中检查数字是否可以从

以下是问题陈述:

3797这个数字有一个有趣的特性。作为素数本身,可以从左到右连续删除数字,并在每个阶段保持素数:3797、797、97和7。类似地,我们可以从右到左工作:3797、379、37和3

求从左到右和从右到左都可截断的十一个素数之和

注:2、3、5和7不被视为可截断素数

我的代码提供了部分输出。11个必需的素数中只有5或6个被输出,3797不是其中之一。因此,为了找到错误,我手动(在一张纸上)运行了3797的代码,但不知何故无法找到故障

我认为错误在第二部分,代码中检查数字是否可以从左边截断的部分

代码:

#包括
int isprime(int n)//检查数字是否为素数
{
int i;
如果(n==1)
返回(0);
for(i=2;i0)//检查数字是否可左截断
{   
数字=p%10;
p=p/10;
如果(z1==0)
{
reverse=digit;//此处reverse不是指对数字进行反转。它从右向左一次生成一个数字。
}
其他的
{   
反向=数字*x*10+反向;
x++;
}
如果(iPrime(反向)==1)
{
count1++;
}
z1++;
}
如果(z1==count1)
printf(“%d”,i);
}
z=0;
z1=0;
count1=0;
计数=0;
反向=0;
反向2=0;
x=1;
}                                                                                                                                                                                       
}   
}

您的左侧可截断支票错误。我做的不同,更简单

#include<stdio.h>
int isprime(int n) //Checks whether the number is prime or not
{
    int i;
    if(n==1)
        return(0);
    for(i=2;i<n/2+1;i++)
    {

        if(n%i==0)
        {
            return(0);
            break;
        }   
    }
    return(1);      
}
int power(int a, int b){
    int r = 1;
    int i=0;
    for (i=0;i<b;i++){
        r = r * a;
    }
    return r;
}

int main(void)
{
    int count=0,z=0;
    int i;
    int n;
    int z1=0;
    int p;
    int count1=0;
    int digits;
    int k=1000000;
    for(i=2;i<k;i++)
    {
        if(isprime(i)==1)
        {
            z = 0;
            count = 0;
            n=i;
            p=i;
            while(n>0) // This function removes the digits of the prime number from the right
            {
                n=n/10;
                if(isprime(n)==1)
                {
                    count++;
                }else{
                    count = -1;
                    break;
                }   
                z++;
            }

            if(z==count) 
            {   
                z1= 0;
                count1=0;
                n = i;
                p= i;
                while(p>0) //Checks whether number is left truncatable 
                {   
                    digits=n%power(10,z1+1);
                    p = p /10;
                    if (isprime(digits)==1)
                    {
                        count1++; 
                    }else{
                        count1 =-1;
                        break;
                    }
                    z1++;
                }

                if(z1==count1)
                    printf("%d\n ",i);

            }
        }                                                                                                                                                                                       
    }   

} 
#包括
int isprime(int n)//检查数字是否为素数
{
int i;
如果(n==1)
返回(0);

对于(i=2;IGOT错误,它不应该是x++但是x=x*10。对不起:)如果在<代码> ISPrime<代码>中,它将工作得更快。您只考虑那些满足<代码> i> i的代码> i>代码>
#include<stdio.h>
int isprime(int n) //Checks whether the number is prime or not
{
    int i;
    if(n==1)
        return(0);
    for(i=2;i<n/2+1;i++)
    {

        if(n%i==0)
        {
            return(0);
            break;
        }   
    }
    return(1);      
}
int power(int a, int b){
    int r = 1;
    int i=0;
    for (i=0;i<b;i++){
        r = r * a;
    }
    return r;
}

int main(void)
{
    int count=0,z=0;
    int i;
    int n;
    int z1=0;
    int p;
    int count1=0;
    int digits;
    int k=1000000;
    for(i=2;i<k;i++)
    {
        if(isprime(i)==1)
        {
            z = 0;
            count = 0;
            n=i;
            p=i;
            while(n>0) // This function removes the digits of the prime number from the right
            {
                n=n/10;
                if(isprime(n)==1)
                {
                    count++;
                }else{
                    count = -1;
                    break;
                }   
                z++;
            }

            if(z==count) 
            {   
                z1= 0;
                count1=0;
                n = i;
                p= i;
                while(p>0) //Checks whether number is left truncatable 
                {   
                    digits=n%power(10,z1+1);
                    p = p /10;
                    if (isprime(digits)==1)
                    {
                        count1++; 
                    }else{
                        count1 =-1;
                        break;
                    }
                    z1++;
                }

                if(z1==count1)
                    printf("%d\n ",i);

            }
        }                                                                                                                                                                                       
    }   

}