首先是自己瞎写的一个判断质数的函数:
bool pr(long long n)
{
if(n==2) return true;
long long t=2;
while((t<=sqrt(n))&&(n%t!=0)) t++;
if(n%t==0) return false;
else return true;
}
然后是主函数部分:
int main()
{
long long sum1,sum2=2,sum3=1;
cin>>sum1;
cout<<"2"<<endl;
for(long long i=3;i<=sum1;i+=2)
{
if((pr(i))&&(i+sum2<=sum1))
{
sum2+=i;
cout<<i<<endl;
sum3++;
}
}
cout<<sum3;
return 0;
}
可惜又没有一遍过,你们发现错在哪了吗?
因为最小的质数是2,所以如果输入的最大和()小于2,那么就直接输出0,不要让程序继续在那瞎搞了。
#include<bits/stdc++.h>
using namespace std;
bool pr(long long n)
{
if(n==2) return true;
long long t=2;
while((t<=sqrt(n))&&(n%t!=0)) t++;
if(n%t==0) return false;
else return true;
}
int main()
{
long long sum1,sum2=2,sum3=1;
cin>>sum1;
if(sum1<2) cout<<"0";
else
{
cout<<"2"<<endl;
for(long long i=3;i<=sum1;i+=2)
{
if((pr(i))&&(i+sum2<=sum1))
{
sum2+=i;
cout<<i<<endl;
sum3++;
}
}
cout<<sum3;
}
return 0;
}
因为作者非常糟糕,所以若有不足请在评论区中指出。