各位,这道题怎么改才能不超时。

题目:

14. 三质数

题目ID:1194100分

最新提交:

Time Limit Exceeded

0 分

历史最高:

Time Limit Exceeded

0 分

时间限制: 1000ms

空间限制: 131072kB

题目描述

时间限制:1s 空间:256M

题目描述:

一个数的约数也称为因子,比如11是66的因子,22是66的因子,66是66的因子。

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

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

输入格式:

第一行一个整数T,表示有T组测试数据。

每组测试数据输入一个整数𝑛n

输出格式:

对于每组测试数据,判断是否是三质数,如果是输出YES,否则输出NO

样例输入:

3 4 5 6

样例输出:

YES NO NO

约定:

1 <=𝑛 <=1012,数据组数不超过103 1 <=n <=1012(12是次方),数据组数不超过103
代码:
#include
#include
#include
#include
using namespace std;

int main(){
int a,b,d,c=0;
cin>>b;
for(d=1;d<=b;d++){
cin>>a;
c=0;
for(int i=2;iii*i<=a;i++){
if(a%i==0){
c+=1;
}
}
if(c==0){
cout<<“Yes”;
}
else{
cout<<“NO”;
}
}
return 0;
}

1 个赞

三质数一定是某个质数的平方

具体来说就是线性筛筛出 10^6 以内的质数,再 O(1) 求解

1 个赞

o(1)是什么

时间复杂度