我刚刚开始学习C,我想做一个程序来查找200和300之间有多少个质数,但是由于我的程序似乎甚至没有循环,所以我似乎没有弄清楚它。您能提出解决办法吗?对于那些不知道的人,质数是那些不能通过将两个较小的自然数相乘而形成的大于1的数。 (例如3、5、7)
#include <stdio.h>
#define START 200
#define END 300
int main()
{
int primenum = 0, i = 0, j = 0, c = 0;
for (i = START; i <= END; i++)
{
for (j = 1; j <= i; j++)
{
if (i%j == 0)
{
c++;
}
if (c == 2)
{
primenum = primenum + 1;
}
}
}
printf("tHE PRIME NUMBERS ARE %d", primenum);
}
答案 0 :(得分:0)
这是我的解决方案:
#include <stdio.h>
#define START 200
#define END 300
int main()
{
int primenum = 0, i = 0, j = 0, c = 0;
for (i = START; i <= END; i++)
{
c = 2;
for (j = 2; j <= i-1; j++)
{
if (i%j == 0)
{
c++;
}
}
if (c == 2) primenum = primenum + 1;
}
printf("THE PRIME NUMBERS ARE %d", primenum);
return 0;
}
我将c = 2放在i中,因为质数有2个因数(1和它本身)。 for with j从2开始,因为1是除数,在i-1处结束,因为i是数字,每个数字本身就是一个除数。我用j测试了for末尾的c值,因为如果在内部测试该值,则结果是错误的。我获得了200至300之间的16个质数。
答案 1 :(得分:0)
让我们解决一些问题。
for(j = 1; j <= i; j ++)每个
number
被1
整除,并且itself
,因此您需要解决此问题。您应该开始j=2
来j=i-1
您需要将for (j = 1; j <= i; j++)
更改为for (j = 2; j <i; j++)
您需要为每个数字重置计数器变量
c
,然后再进行操作 进入嵌套的for
循环。您正在循环中检查
c
的值,这就是为什么 得到错误的结果。您应该在之后检查c
的值 脱离loop
。
#include <stdio.h>
#define START 100
#define END 200
int main()
{
int primenum = 0, i = 0, j = 0, c = 0;
for (i = START; i <= END; i++)
{
c=2;
for (j = 2; j <i; j++)
{
if (i%j == 0)
{
c++;
break;
}
}
if (c == 2)
{
primenum = primenum + 1;
}
}
printf("tHE PRIME NUMBERS ARE %d", primenum);
}