给出一个数x,判断它是否为素数,并输出所有它的素因子
第1行输入组数T,代表有T组数据。
第2-T+1行每行输入一个数x表示对应询问。
数据保证:2≤x≤1e9
对于每组询问输出两行表示结果。
第1行,如果x是素数,输出“isprime”(不含双引号),否则输出“noprime”(不含双引号)。
第2行,输出x的素因子。
示例1
输入
3
2
9
10
输出
isprime
2
noprime
3
noprime
2 5
我写的代码提交总是超时, 我想的是创建两个函数一个是判断是否是素数,一个是分解成质因数,之后放在set里去重排序再输出出来,可是会超时,有哥帮忙看看如何改进一下吗。
#include<iostream>
#include<set>
using namespace std;
set<int> s;
bool prime(int n){
bool yes=true;
for(int i=2;i*i<=n;i++){
if(n%i==0){
yes=false;
}
}
return yes;
}
void fjys(int n){
for(int i=2;i<=n;i++){
if(n%i==0){
if(prime(i)){
s.insert(i);
}
else {
fjys(i);
}
}
n/=i;
}
return ;
}
int main()
{
int t;
cin>>t;
while(t--){
s.clear();
int n;
cin>>n;
if(prime(n)){
cout<<"isprime"<<endl<<n<<endl;
}
else{
cout<<"noprime"<<endl;
for(int i=2;i<=n;i++){
if(n%i==0){
if(prime(i)){
s.insert(i);
n/=i;
}
else {
fjys(i);
n/=i;
}
}
}
for (auto it = s.begin(); it != s.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
}
}
return 0;
}