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