想用c语言写一个输出1到100的质数的程序,可是运行输不出值,不知道为什么

我是想从二开始递增到一百,
除数就从和被除数一样大,到小,
count为记录因数的多少
因数只有两个(则其中一个因数为1,另一个为其本身时输出)
否则因数减一,一个个试。
怎么不行,为什么试不出来值呢?
有没有神仙解释一下枯了
自学的

img

你题目的解答代码如下:


#include <stdio.h>

int main()
{
    int a,i,count;
    for (i = 2; i < 100; i++)
    {
        count = 0;//每测试一个数之前count因数个数都要重置为0
        a = i;
        for (; a>=1; a--) // a应该循环到 1
        {
            if (i%a == 0)
                count++;
        }
        if (count == 2) //if要放在for循环之外
            printf("%d ", i);
    }
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

你的if嵌套关系不对,逻辑有些错误
这是改正后的代码

#include <stdio.h>

int main(int argc, char const *argv[])
{
    int count;
    for (int i = 0; i < 100; i++)
    {
        count = 0;
        for (int j = 1; j <= i; j++)
        {
            if (i % j == 0)
            {
                count++;
            }
        }
        if (count == 2)
        {
            printf("%d ", i);
        }
    }
};

有帮助望采纳~

你的思路是怎么样的,如果要满足你的需要的话,那么应该是两个循环嵌套,外循环从1遍历到100,内循环用来判断是否是素数

你代码输出的条件是count==2或a=1,但是由于a只能>=i,所以i%a==0最多只能有一次,所以count最大只能是1,其次,一开始a=i=2,后面a只能增大,所以不可能a=1的,所以都不满足输出的条件,所以没有输出

我来给你个思路,我觉得思路还是比直接给你代码要好的多,要养成自己动手的好习惯。首先还是要明确问题,质数是只能对1和本身取余为零的数,明白这一点就好了,我只需要把小于这个数范围的所有数进行取余的判定,当然要舍去1和它本身,比如3,只需要判断对2取余是否为零。比如4,就要判断2和3取余是否为零。所以这个程序应该最开始打印的应该是1和2,因为这两个数很明显不适合上面说的判定,况且只有两个数,干脆就直接输出。此时你应该定义一个变量从3开始累加,每加一次就应该对其进行质数的判定,如果取余为零,这个数终止判定,累加进下一个数继续判定,如果取余最后不为零,打印这个数,也应提前定义一个变量累加来保存质数个数。如果你懂数据结构的话,可以先除2在判定,当然这无所谓

虽然你的代码比较糟糕(没有优化),但是估计只有我知道你的思路没有问题,你错误在于count在每次大循环之后,要清零。把count=0写在第一个for的里面就可以了。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632