题目描述
如果一个质数能被表示为三个不同的质数的和的形式,那么我们称它为立方质数。现在给你一个数n,判断它是不是立方质数。
输入数据
正整数n,n<=1000
输出数据
Yes或者No
代码
#include<iostream>
#include<math.h>
using namespace std;
#define YES {cout<<"Yes"<<endl; exit(0);}
#define NO {cout<<"No"<<endl; exit(0);}
bool is_prime(int x) {
int max_factor = sqrt(x);
for (int i = 2; i <= max_factor; ++i) {
if (x % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
if (n < 2 || n > 1000 || !is_prime(n)) NO;
for (int p1 = 2, p1_max = n / 3; p1 <= p1_max; ++p1) {
if (is_prime(p1)) {
int remanent = n - p1;
for (int p2 = p1 + 1, p2_max = remanent / 2; p2 <= p2_max; ++p2) {
int p3 = remanent - p2;
if (is_prime(p2) && p3 != p2 && is_prime(p3)) YES;
}
}
}
NO;
}