我输入100,出来的素数个数是26。不应该是25吗?

编写函数int fun (int lim, int aa[MAX] ),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回所求出素数的个数。然后编写主函数调用它。


#include<stdio.h>
int fun(int lim, int aa[])
{
    int i, j = 0, s = 2, n = 0;
    for (i = 3; i <= lim; i++)
    {
        for (j = 2; j <= i; j++)
        {
            if (i % j == 0)break;

        }
        if (j > i - 1)
        {
            s++;
            aa[n] = i;

        }
    }
    return s;
}
int main()
{
    int aa[100], lim, s;
    scanf_s("%d", &lim);
    s = fun(lim, aa);
    printf("%d", s);
    return 0;
}

我能理解你想偷懒所以把2当做默认的素数,不过s初始化要为1
s=1
后面n每次要加1
aa[n++]=i;

你的s初始化为2,你是怎样考虑的呢,你的i从3开始,3之前的素数只有2一个,应该初始化s=1才对吧

s不应该初始化为2,3之前的素数只有2一个,1既不是素数也不是偶数,将s初始化为1就可以了

供参考:

#include<stdio.h>
int fun(int lim, int aa[])
{
    int i, j = 0, s = 0, n = 0, flg;
    for (i = 1; i <= lim; i++)   //for (i = 3; i <= lim; i++)
    {
        for (j = 2, flg = 1; flg && j < i; j++) //for (j = 2; j <= i; j++)
        {
            if (i % j == 0) flg = 0;   //break;
        }
        if (flg && i != 1)  //if (j > i - 1)
        {
            s++;
            aa[n++] = i;   //aa[n] = i;
        }
    }
    return s;
}
int main()
{
    int aa[100] = {0}, lim, s;
    scanf_s("%d", &lim);
    s = fun(lim, aa);
    printf("%d", s);
    return 0;
}