题意:一个数n拆成k个数,sum=sum{ni}(除了ni本身的最大的因数),k可以等于1;
质数除本身的最大因数为1,把数拆成质数的个数就是解;
开始暴力有一组数错了,,感觉过程没有错 ……
说个数学知识:哥德巴赫猜想:
任何一个偶数都可以拆成两个质数的和;
任何一个奇数如果n-2为质数 那么这个奇数可以拆成两个质数的和,
否则就是可以拆成3个质数的和。
然后就容易懂了
code:
#include <iostream>
#include<cstdio>
using namespace std;
int Prime(int n)
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n,cnt;
scanf("%d",&n);
if(Prime(n))
cnt=1;
else if(!(n%2))
cnt=2;
else
{
if(Prime(n-2))
cnt=2;
else cnt=3;
}
printf("%d\n",cnt);
return 0;
}