rrc12345 2022-02-13 20:36 采纳率: 83.3%
浏览 36
已结题

C++编程题,超时原因不明

问题遇到的现象和发生背景

题目:
一个数的约数也称为因子,比如1是6的因子,2是6的因子,6是6的因子。

质数只有两个因子,1和它本身

现在定义一种新的质数,三质数,三质数只有三个不同的因子。比如4是三质数,因为它有1,2,4三个因子。比如6不是三质数,因为6有1,2,3,6四个因子。现在有一些数,你需要判断他们是不是三质数。

有T组数据,每组一个数,是三质数输出YES,不是输出NO,一个一行

样例输入:
3
4
5
6

样例输出:
YES
NO
NO

数据范围:1<=T<=10^3;对于每个n,1<=n<=10^12

问题相关代码,请勿粘贴截图
#include<bits/stdc++.h>
using namespace std;
int main(){
    int T;
    cin>>T;
    for(int i=0;i<T;i++){
        long long num,yz=0;
        cin>>num;
        for(int j=1;j<=num;j++){
            if(num%j==0)yz++;
        }
        if(yz==3){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }
    }
    return 0;
}

运行结果及报错内容

img

我想要达到的结果

解决题目

  • 写回答

4条回答 默认 最新

  • pro_or_check 2022-02-13 20:55
    关注

    算法太简单,结果应该是对的,就是慢点。
    参考判断质数的算法,似乎是算到sqrt(num)就可以。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 旺仔不爱牛奶 2022-02-13 20:53
    关注

    这样的题目应该是要求一次性输入,利用动态数组存储,再统一判断的

    
    #include<iostream>
    using namespace std;
    int main() {
        int T;
        cin >> T;
        long long* num = new long long[T];
        for (int i = 0; i < T; ++i)
            cin >> num[i];
        for (int i = 0; i < T; i++) {
            long long yz = 0;
            for (int j = 1; j <= num[i]; j++) {
                if (num[i] % j == 0)yz++;
            }
            if (yz == 3) {
                cout << "YES" << endl;
            }
            else {
                cout << "NO" << endl;
            }
        }
        delete[] num;
        return 0;
    }
    
    
    评论 编辑记录
  • qzjhjxj 2022-02-13 21:40
    关注

    试试这样改下:

    #include <iostream>
    using namespace std;
    int main(){
        int T,j,yz;
        cin>>T;
        while(T--){
            long long num,tmp;
            cin>>num;
            tmp = num/2;
            for(j=2,yz = 2;yz < 4 && j<= tmp;j++){//修改
                if(num%j==0) yz++;
            }
            if(yz==3){
                cout<<"YES"<<endl;
            }else{
                cout<<"NO"<<endl;
            }
        }
        return 0;
    }
    
    
    评论
  • HanHanNASa 2022-02-13 21:56
    关注

    个人建议:
    输入用快读
    顶上加个o2或者o3

    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 2月21日
  • 已采纳回答 2月13日
  • 创建了问题 2月13日

悬赏问题

  • ¥15 matlab中此类型的变量不支持使用点进行索引
  • ¥15 咨询第六届工业互联网数据创新大赛原始数据
  • ¥15 Pycharm无法自动补全,识别第三方库函数接收的参数!
  • ¥15 STM32U575 pwm和DMA输出的波形少一段
  • ¥30 android百度地图SDK海量点显示标题
  • ¥15 windows导入environment.yml运行conda env create -f environment_win.yml命令报错
  • ¥15 这段代码可以正常运行,打包后无法执行,在执行for内容之前一直不断弹窗,请修改调整
  • ¥15 C语言判断有向图是否存在环路
  • ¥15 请问4.11到4.18以及4.27和4.29公式的具体推导过程是怎样的呢
  • ¥20 将resnet50中的卷积替换微ODConv动态卷积