C语言纠错。。。。帮忙
解决时间 2021-04-13 16:50
- 提问者网友:骑士
- 2021-04-12 19:49
从小到大找出五个素数,使后面的数比前面的数都大12。
我写了下面的代码。能过编译。。结果错误。。。请大家找找原因
#include<stdio.h>
#include<math.h>
main()
{
int i,k,j,a[100],b[100],m=0,n=1;
for(i=2;i<100;i++)
{ k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0) break;
if(j>k) a[m++]=i;
} // 求出100内的全部素数放在数组a中、
for(i=0;i<m-4;i++)
{ b[0]=a[i];
for(j=i+1;j<m;j++)
if(a[j]-b[0]==12||a[j]-b[0]==24||a[j]-b[0]==36||a[j]-b[0]==48)
{ b[n++]=a[j];
}
if(n<5) //如果没有到5个 ,回到初值
{
n=1;
break;
}
else for(i=0;i<n;i++)
printf("%d",b[i]);
}
}
最佳答案
- 五星知识达人网友:長槍戰八方
- 2021-04-12 20:17
其实按着LZ的大概思路是可以的。。。只是LZ实现上出了点错误而已···改了一点···
#include<stdio.h>
#include<math.h>
main()
{
int i,k,j,a[100],b[100],m=0,n=1,temp;
for(i=2;i<100;i++)
{
k=sqrt(i);
for(j=2;j<=k;j++)
if(i%j==0)
break;
if(j>k)
a[m++]=i;
} // 求出100内的全部素数放在数组a中、
for(i=0;i<m-4;i++)
{
n = 0;
b[n]=a[i];
for(j=i+1;j<m;j++)
{
if(a[j]-b[n]==12)
{
b[++n]=a[j];
}
}
if(n<4) //如果没有到5个 ,回到初值
{
continue;
}
for(i=0;i<=n;i++)
printf("%d ",b[i]);
}
}
全部回答
首先你的思路有问题
1.你能保证100以内的素数满足这个条件?
2.这些满足要求的素数 不一定是紧挨着的
综合这些问题 我写了一个程序
供你参考一下
#include<stdio.h>
#include<math.h>
bool IsPrime(int num)
{
int i,j;
for (i=2;i<=sqrt(num);++i)
{
if (!(num%i))
{
return false;
}
}
return true;
}
void main()
{
int i=1;
while(!(IsPrime(i)&&IsPrime(i+12)&&IsPrime(i+24)&&IsPrime(i+36)&&IsPrime(i+48)))
{
i++;
}
printf("%d %d %d %d %d\n",i,i+12,i+24,i+36,i+48);
}
- 2楼网友:轻熟杀无赦
- 2021-04-12 21:45
你这样只能检测前后连续的素数是否满足条件,而满足条件的5个素数不一定是前后连续的
所以你可以换个方法:先写个函数判断某个数是i否是素数,如果是,依次检测i+12,i+24,i+36和i+48是不是素数,如果5个数都是素数那么满足条件输出并结束,我写的一个代码如下:
#include<stdio.h>
#include<math.h>
int isprime( int n )
{
int j, k;
k=sqrt(n);
for(j=2;j<=k;j++)
if(n%j==0) break;
if(j>k)
return 1;
else
return 0;
}
main()
{
int i, m = 0;
for ( i = 2; m < 5; ++i ) {
if ( isprime( i ) &&
isprime( i+12 ) &&
isprime( i+24 ) &&
isprime( i+36 ) &&
isprime( i+48 ) ) {
printf( "%d %d %d %d %d\n", i, i+12, i+24, i+36, i+48 );
break;
}
}
}
结果是:
5 17 29 41 53
我要举报
大家都在看
推荐资讯