题目描述:给定一个正整数N,N最少表示成多少个素数的和。
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
提示
哥德巴赫猜想:任意大于2的偶数都可以拆分成两个质数之和。该猜想尚未严格证明,但暂时没有找到反例。
import java.util.*;
public class Solution {
/**
* 判断给定的正整数最少能表示成多少个素数的和
* @param N int整型 给定的正整数
* @return int整型
*/
public int MinPrimeSum (int N) {
// write code here
if(judge(N))
return 1;
if(N%2==0||judge(N-2))
return 2;
return 3;
}
public boolean judge(int num){
for(int i=2;i<=Math.sqrt(num);i++){
if(num%i==0)
return false;
}
return true;
}
}
judge()函数用于判断整数num是否为素数,如果是直接输出为1个,如果不是:当N>2且N为偶合数时,N本身不是素数,根据哥德巴赫猜想,肯定是2个;当N>2且N为奇合数时,只能是由奇数+偶数组成,偶质数只有2,所以判断N-2是不是质数即可(N%2==0||judge(N-2))