/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 判断给定的正整数最少能表示成多少个素数的和
* @param N int整型 给定的正整数
* @return int整型
*/
int isPrime(int N){
if(N<2){
return 0;
}
for(int i=2;i<=sqrt(N);i++){
if(N%i==0){
return 0;
}
}
return 1;
}
int MinPrimeSum(int N ) {
// write code here
if(isPrime(N)){//素数本身
return 1;
}
if(N%2==0||isPrime(N-2)){//若B为偶数则一定可以拆分为两个质数合,
//N为奇数时,奇数=奇数+偶数,而偶质数只有2,所以另一个数必为质数(N-2)
return 2;
}
return 3;
// for(int a=2;a<N/2;a++){//哥德巴赫猜想
// int b=N-a;
// if(isPrime(a)&&isPrime(b)){
// return 2;
// }
// }
return 3;
}