初学者关于100以内质数的问题

img


为什么编译出来只有2啊
plus:最后的if语句放大循环里和大循环外有何区别

for循环开始时,需要加n=0,以及i=2
另外i++要放到if(x%i==0)这个代码块后面,不能放在里面啊,不然i就一直不变了

int main()
{
    int n=0;
    int i=2;
    int x;
    for(x=2;x<=100;x++)
    {
        n=0;
        i=2;
        while(i<x)
        {
            if(x%i==0)
            {
                n=1;
                break;
            }
            i++;
        }
        if(n==0)
            printf("%d ",x);
    }

    return 0;
}

推荐你用这个,很方便的。

img

#include<stdio.h>
int isprime(int x)
{
    for(int j=2;j<=x/j;j++)
    {
        if(x%j==0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    for(int i=2;i<=100;i++)
    {
        if(isprime(i))
        {
            printf("%d ",i);
        }
    }
    return 0;
}

#include <stdio.h>
int main()
{
    //int n=0;
    int x=2;
    for(x=2;x<=100;x++)
    {
        int i=2;
        while (i<=x)
        {
            if(x%i==0)
            {
                break;
            }
            i++;
        }
        if(x==i)
        {
            printf("%d ",x);
        }
    }
    return 0;
}

修改了一下代码!

img

详细注释,供参考:

#include <stdio.h>
int main()
{
    int n, i, x;
    for (x = 2; x <= 100; x++) { //外循环,让 x = 2 -- 100 之间每个数出现一次
        i = 2; n = 0;    // x 每变化一次,都让 i = 2, n = 0 作为初始值  
        while (i < x) {  //内循环,对每一个 x ,找它的因子数,如果找到则把 n = 1,否则 n = 0.
            if (x % i == 0) //寻找因子数时,从 i = 2 开始,一直到 i = x - 1 为止
            {
                n = 1;
                break;  //找到了 ,这里用 break 跳出while()循环 
            }
            i++; // i 从 2 开始,如果不是因子数,自增一次为 3 ,再 if()判断一次,以此类推
        }
        if (n == 0)//如果 i = 2 --- x - 1 范围内没找到因子,判断这个 x 就是质数,打印输出。  
            printf("%d ", x);
    }
    return 0;
}