题目链接:http://codeforces.com/problemset/problem/735/D
题意:将一个数拆成若干个素数的和(也可以不拆),使得拆分的个数和最小。
分析:偶数很简单,根据哥德巴赫猜想,任一大于2的偶数都可写成两个素数之和,所以为2。奇数情况下,如果是素数则为1,如果不是素数,发现可以拆分成2和一个素数,如果不能则只能拆成三份,事实上只有这两种情况了,我也不知道为什么QAQ,当时以为能接着拆就写了个循环,只过了十几组数据就WA掉了。
AC代码如下
#include<bits/stdc++.h>
using namespace std;
bool isprime(int n)
{
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0) return 0;
}
return 1;
}
int main()
{
int n;
cin>>n;
if(n==2)
cout<<"1"<<endl;
else if(n%2==0)
cout<<"2"<<endl;
else if(isprime(n))
cout<<"1"<<endl;
else if(isprime(n-2))
cout<<"2"<<endl;
else cout<<"3"<<endl;
return 0;
}
本文针对Codeforces上的一道题目进行了解析,该题目要求将一个整数拆分为尽可能少的素数之和。文章提供了详细的解题思路,并附上了AC代码。主要涉及哥德巴赫猜想的应用以及对奇数和偶数的不同处理方式。

444

被折叠的 条评论
为什么被折叠?



