求40以内的质数,这个循环哪里错了

想要求出40以内的质数,但是出错了 输出为2 3 0 0

#include 
using namespace std;

int main()
{
    int check=1,i=0;
    int prime[1000]={2};
    for(int j=3;j<40;j++)
    {
        for(int k=2;kif(j%k==0)
            {
                check=0;
                break;
            }
        }
        if(check==1)
        {
            prime[i+1]=j;
            i++;
        }
    }
    for(int k1=0;k1<40;k1++)
    {
        cout<

这个是在哪里错了

内层循环开始前,要将check设置为1
对i的使用也不当。

#include <iostream>
using namespace std;
 
int main()
{
    int check=1,i=1;
    int prime[1000]={2};
    for(int j=3;j<40;j++)
    {
        check = 1;
        for(int k=2;k<j;k++)
        {
            if(j%k==0)
            {
                check=0;
                break;
            }
        }
        if(check==1)
        {
            prime[i]=j;
            i++;
        }
    }
    for(int k1=0;k1<i;k1++)
    {
        cout<<prime[k1]<<endl;
    }
    
    return 0;
}
 

#include <iostream>
using namespace std;
 
int main()
{
    int check, i=1;
    int prime[1000]={2};
    for(int j=3; j < 40; j++)
    {
        check = 1;
        for(int k=2; k<j; k++)
        {
            if(j % k == 0)
            {
                check=0;
            }
        }
        if(check == 1)
        {
            prime[i] = j;
            i++;
        }
    }
    for(int k1=0; k1<i; k1++)
    {
        cout<<prime[k1]<<endl;
    }
    
    return 0;
}