描述
给两个数字 n 和 k. 我们需要判断 n 是否可以写成 k 个素数的和.(n<=1e^9)
解释:根据哥德巴赫猜想,即任一大于2的偶数都可写成两个素数之和。
- 当n为偶数时,k不论奇数偶数,只要n>=2*k都可以分解成功。(因为最小的素数是2,你得保证这个数最少可以分成k个2)
- 当n是奇数时,3是个质数,n-3又成了偶数,就可以直接把n-3当偶数处理。所以只要n-3能分解成k-1个素数,(n,k)就能分解成功
注意:这两种情况,最后都再特判一下k=1得时候,这个数是不是素数就好了
代码:
class Solution {
public:
/**
* @param n: an int
* @param k: an int
* @return: if N can be expressed in the form of sum of K primes, return true; otherwise, return false.
*/
bool isprime(int n)
{
if(n==0 || n==1) return false;
for(int i=2;i*i<=n;i++)
if(n%i==0) return false;
return true;
}
bool judegeEven(int n,int k)
{
if(k==1 && isprime(n)) return true;
if(k<2) return false;
if(n>=2*k) return true;
return false;
}
bool isSumOfKPrimes(int n, int k)
{
// write your code here
if(n%2==0) return judegeEven(n,k);
else
{
if(k==1 && isprime(n)) return true;
if(judegeEven(n-3,k-1)) return true;
return false;
}
}
};