为什么编译运行不出来我想要的结果(输出十对孪生素数)求解,本身是求出两组素数,然后相减等于二,输出前十个,可是我却编译出来空白
题主的代码里,第一个for()就死循环了,当然没结果了。题主的思路是,先找到第一个素数,找到后接着素数再找一个,最后将这两个素数相减等于2后计数 count++,直到 count 等于 10 ,停止循环。但代码里没按这思路写。
题主的代码修改如下,供参考:
#include <stdio.h>
int main()
{
int number1 = 0,number2 = 0,i,j,a,b,count = 0;
for (i = 2;count < 10;i++) // 修改
{
for (j = 2,a = 0,b = 0;j < i;j++)
{
if (i % j == 0) break;
}
if (j == i)
{
a = i; //a 保留第一个找到的质数
for (j = 2;j < i + 2;j++)
{
if ((i+2) % j == 0) break;
}
if (j == i + 2)
b = i + 2; //b 为与a相差2的质数
}
if (a && b) //如果a b 两数都不是0,就找到了质数对
{
printf("%d %d\n",a, b);
count++;
}
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int prime(int x)
{
if(x==1)
return 0;//不是素数
int i;
for( i=2; i*i<=x; i++) //i*i<=n,用math.h了可以写为i<=根号x
{
if(x%i==0)
return 0;
}
return 1;
}
int main()
{
int i,j,k;
for(i=2,k=0;k<=10;i++)
{
if(prime(i)&&prime(i+2))
{
k++;
printf("%d,%d\n",i,i+2);
}
}
//printf("Hello world!\n");
return 0;
}