这里哪里有问题吗,为什么部分正确

img


#include<stdio.h>
int main()
{
    int a;
    scanf("%d",&a);
    int j=2,sum=0,k,n=0;
    int d[1000],l=0;
    while(1)
    {
        for(k=2;k<=j;k++)
        {
            if(j%k==0)
            break;
        }
        if(j==k)
        {
            sum=sum+j;
            n++;
            printf("%d\n",j);
        }
        if(sum>=a)
        break;
        else
        j++;
        
    }
    printf("%d",n);
    return 0;
}

img

img

供参考:

#include<stdio.h>
int isprime(int n)
{
    int i;
    if (n <= 3)return n > 1;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0)  return 0;
    return 1;
}
int main()
{
    int a;
    scanf("%d", &a);
    int sum = 0, k = 2, n = 0;
    while (sum < a)
    {
        if (isprime(k))
        {
            sum += k;
            n++;
            printf("%d\n", k);
        }
        k++;
    }
    printf("%d", n);
    return 0;
}

如果有个质数是101 , 还有两个质数是3 5 ,那么你这样超过上限就停止的算法是不对的,你要比较,把大的扔掉,选择小的,这样能放更多个