题意:
给定整数n,你可以把这个数拆成若干个大于2的数的和,拆完之后每个数的贡献为这个数除了自身的最大因子
问最小总贡献是多少
数据范围:n<=2e9
解法:
显然质数的贡献为1,容易想到把n拆成数量最少的质数,总贡献为拆出的数的数量
如果n是质数那么不用拆分答案为1
哥德巴赫猜想:任一大于2的偶数都可写成两个素数之和
那么如果n是偶数答案为2
如果n是奇数,先判断拆出一个2之后n-2是否是质数,如果是则答案为2
否则拆出一个3使得n-3是偶数,答案为3
code:
#include<bits/stdc++.h>
using namespace std;
#define int long long
bool isprime(int x){
for(int i=2;i*i<=x;i++)if(x%i==0)return 0;
return 1;
}
signed main(){
int x;cin>>x;
if(isprime(x))cout<<1<<endl;
else{
if(x%2==0)cout<<2<<endl;//偶数可以拆成两个质数
else{//奇数
if(isprime(x-2))cout<<2<<endl;//提个2之后是奇数
else cout<<3<<endl;//提个3之后变成偶数
}
}
return 0;
}