时间限制 1000 ms
内存限制 64 MB
题目描述
如果一个质数能被表示为三个不同的质数的和的形式,那么我们称它为立方质数。现在给你一个数n,判断它是不是立方质数。
输入数据
正整数n,n<=1000
输出数据
Yes或者No
样例输入
19
样例输出
Yes
#include<stdio.h>
#include<math.h>
#include <iostream>
using namespace std;
int isPrime(int number);
int main(){
int m; // 输入的整数
//printf("输入一个小于等于1000的正整数:");
//scanf_s("%d", &m);
cin >> m;
if (m > 1000 || m < 1){
//cout << "输入数据不合法!" << endl;
printf("输入数据不合法!");
return 0;
}
else
{
int flag = isPrime(m);
int t_flag = 0;
if (flag == 1){
int times = m % 3;
int k = m / 3;
//cout << "余数:"<<times <<"商:"<<k<<endl ;
for (int i = 2; i <m-4; i = i + 1){
for (int j = 2; j < m-i-1; j = j + 1 ){
if ((isPrime(i) == 1 && isPrime(j) == 1 && isPrime(m - i - j) == 1 && (i != j) && (i != (m - i - j)) && ((m - i - j) != j))
)
{
//cout << "Yes" << endl;
printf("Yes");
t_flag = 1;
return 1;
//break;
}
}
}
if (t_flag == 0){
//cout << "No" << endl;
printf("No");
}
//判断输入是否为素数
}
else if (flag == 0)
{
//cout << "No" << endl;
printf("No");
}
//判断数据范围合法
}
return 1 ;
}
int isPrime(int number){
int flag=1;
int i; // 循环次数
int k; // m 的平方根
// 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型
k = (int)sqrt((double)number);
for (i = 2; i <= k; i++){
if (number%i == 0){
flag = 0;
break;
}
}
return flag;
}
网友评论