作业帮 > 综合 > 作业

c语言编程题目 整数n=p*q,p和q为质数,且p≠q,我们称n为D-Prime,请写个程序判断一个数是不是D_Prim

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 17:01:27
c语言编程题目 整数n=p*q,p和q为质数,且p≠q,我们称n为D-Prime,请写个程序判断一个数是不是D_Prime.
输入
第一行是一个整数K,表示样例的个数.以后每行是一个整数x,(1 ≤ x ≤ 100,000,000);
输出
每行输出一个样例的结果,如果是输出“Yes”,否则输出“No”.
样例输入
4 30 121 21 12
样例输出
No No Yes No
// 刚写的,测试通过,如果有疑问,欢迎交流
#include<stdio.h>
#include<math.h>

bool is_prime(int tar){//判断是否为素数
\x09int i = 2;
\x09while(i <= sqrt(float(tar))){
\x09\x09if(tar % i == 0)
\x09\x09\x09return false;
\x09\x09i++;
\x09}
\x09return true;
}
int main(){
\x09int num;
\x09scanf("%d", &num);
\x09for(int i = 0; i < num; i++){
\x09\x09int cur_val;
\x09\x09scanf("%d", &cur_val);
\x09\x09bool flag = false; //标记
\x09\x09for(int j = 1; j<= sqrt(float(cur_val)); j++){
\x09\x09\x09if(cur_val % j ==0&&j!=cur_val/j&&is_prime(j) && is_prime(cur_val / j)){
\x09\x09\x09\x09printf("YES\n");
\x09\x09\x09\x09flag = true;
\x09\x09\x09\x09break;
\x09\x09\x09}
\x09\x09}
\x09\x09if(!flag)
\x09\x09\x09printf("NO\n");
\x09}
\x09return 0;
}
再问: 新手啊!看的不是太懂,简单点吧!但注意优化,否则会超时哦。
再答: //这份code超时了么? 如果超时的话,我再想办法优化
#include<stdio.h>
#include<math.h>
 
bool is_prime(int tar){//判断是否为素数
    int i = 2;
    while(i <= sqrt(float(tar))){//这里做了优化了
        if(tar % i == 0)
            return false;
        i++;
    }
    return true;
}
int main(){
    int num;
    scanf("%d", &num);
    for(int i = 0; i < num; i++){
        int cur_val;
        scanf("%d", &cur_val);
        bool flag = false; //标记
        for(int j = 1; j<= sqrt(float(cur_val)); j++){//这里也有优化
            if(cur_val % j ==0&&j!=cur_val/j&&is_prime(j) && is_prime(cur_val / j)){
            //这里的if条件就是判断当前的元素,是否满足条件
            //1.从左往右,依次判断cur_val是否能整除j
            //2.如果1.满足,则看j和cur_val/j是否相等,相等,不满足题意
            //3.如果2满足,则判断j是否是质数
            //4.如果3满足,则判断cur_val/j是否是质数
            //如果4满足则说明这个数,满足题意了。
                printf("YES\n");
                flag = true;
                break;
            }
        }
        if(!flag)
            printf("NO\n");
    }
    return 0;
}
再问: 不好意思啊!我的编程软件编译不了你的程序,我用的是code blocks因为是新手嘛!所以你能不能用我们当前写过的c语言表示下,我们学了指针,函数和数组。
再答: //刚修改了你再试试,看你的编译器能否编译
#include<stdio.h>
#include<math.h>
  
int is_prime(int tar){//判断是否为素数
    int i = 2;
    while(i <= sqrt((float)tar)){//这里做了优化了
        if(tar % i == 0)
            return 0;
        i++;
    }
    return 1;
}
int main(){
    int num, i, j;
    scanf("%d", &num);
    for(i = 0; i < num; i++){
        int cur_val;
        scanf("%d", &cur_val);
        int flag = 0; //标记
        for(j = 1; j<= sqrt((float)cur_val); j++){//这里也有优化
            if(cur_val % j ==0&&j!=cur_val/j&&is_prime(j) && is_prime(cur_val / j)){
            //这里的if条件就是判断当前的元素,是否满足条件
            //1.从左往右,依次判断cur_val是否能整除j
            //2.如果1.满足,则看j和cur_val/j是否相等,相等,不满足题意
            //3.如果2满足,则判断j是否是质数
            //4.如果3满足,则判断cur_val/j是否是质数
            //如果4满足则说明这个数,满足题意了。
                printf("YES\n");
                flag = 1;
                break;
            }
        }
        if(!flag)
            printf("NO\n");
    }
    return 0;
}