题意:
给你一个数,可以将它拆成n个数加和(n大于等于1),求这几个数最大因子(不包括自己)加和的最小值。
思路:
给这道题跪了,没有想到用哥德巴赫猜想,就当做是学姿势吧。
对于一个素数来说,它最大因子就是1,所以答案明显是1.
对于合素,分奇数偶数两种情况,对于一个大于6的偶数,可以拆成两个素数的和,所以它的最小值就是2,然后奇数可以通过减去一个非偶质数得到一个偶数,所以答案是3,但是有特例,如果减去一个偶数质数,即2,可能得到的数也是质数,这时候答案就是2比3小了。
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
bool pri(int x)
{
int i;
for(i=2; i<=sqrt(x); i++)
{
if(x%i==0)return false;
}
return true;
}
int main()
{
int n;
cin>>n;
int i;
if(pri(n))
{
printf("1\n");
}
else
{
if(n%2==0)printf("2\n");
else
{
if(pri(n-2))printf("2\n");
else printf("3\n");
}
}
return 0;
}