程序员

枚举算法作业(六)

2018-09-25  本文已影响63人  续袁

时间限制 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;

}
上一篇 下一篇

猜你喜欢

热点阅读