程序不会循环,素数查找器,C

时间:2018-10-20 11:13:10

标签: c

我刚刚开始学习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);
}

2 个答案:

答案 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 ++)每个number1整除,并且   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);
}