时间限制 1000 ms 内存限制 64 MB
题目描述
如果一个质数能被表示为三个不同的质数的和的形式,那么我们称它为立方质数。现在给你一个数n,判断它是不是立方质数。输入数据
正整数n,n<=1000输出数据
Yes或者No样例输入
19样例输出
Yes #include <iostream> #include <cmath> using namespace std; int isPrime(int n) { float n_sqrt; if (n == 2 || n == 3) return 1; if (n % 6 != 1 && n % 6 != 5) return 0; n_sqrt = floor(sqrt((float)n)); for (int i = 5; i <= n_sqrt; i += 6) { if (n % (i) == 0 | n % (i + 2) == 0) return 0; } return 1; } int main() { int n; cin >> n; if (!isPrime(n)) { cout << "No" << endl; return 0; } int j = 0; int prim[1000] = { 0 }; for (int i = 2; i < 1001; i++) { if (isPrime(i)) { prim[j++] = i; } } while (prim[j-1] >= n) { j--; } for (int x = 0; x < j; x++) { for (int y = x + 1; y < j; y++) { for (int z = y + 1; z <= j; z++) { int ans = prim[x] + prim[y] + prim[z]; if (ans == n) { //cout << prim[x] << "-" << prim[y] << "-" << prim[z] << endl; cout << "Yes" << endl; return 0; } if (ans > n) { break; } } } } cout << "No" << endl; return 0; }