#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;
}

#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;
if(sum>a)
break;
n++;
printf("%d\n",j);
}
j++;
}
printf("%d",n);
return 0;
}
第20行,先判断 if(sum>=a) ,再输出
你这个代码理解起来可能有点费劲,我给你个代码参考一下吧,是C++的,改成C的话,改一下输入输出就行。别忘了采纳一下哦
#include<iostream>
bool prime(int n)
{
const int t = sqrt(n);
for (int i = 2; i <= t; ++i)
{
if (n % i == 0)
return false;
}
return true;
}
int main()
{
//贪心算法,从最小的质数开始装
int L, count = 0;
std::cin >> L;
for (int i = 2; i <= L; ++i)
{
if (prime(i))
{
std::cout << i << '\n';
L -= i;
++count;
}
}
std::cout << count;
return 0;
}