题目描述
给出一个数x,判断它是否为素数,并输出所有它的素因子。
输入描述
第1行输入组数T,代表有T组数据。
第2-T+1行每行输入一个数x表示对应询问。
数据保证:2≤x≤109
输出描述:
对于每组询问输出两行表示结果。 第1行,如果x是素数,输出“isprime”(不含双引号),否则输出“noprime”(不含双引号)。 第2行,输出x的素因子。
示例1
输入
3 2 9 10
输出
isprime 2 noprime 3 noprime 2 5
ACcode
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll n=1e6+3;
ll st[1000005];
void sai()//埃氏筛
{
st[1]=1;
for(int i=2;i<=n;i++)
{
if(!st[i])
{
for(int j=1;j*i<=n;j++)
st[i*j]=1;
}
}
}
ll check(ll x)//素数判断
{
if(x==1) return 1;
if(x==2) return 0;
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0) return 1;
}
return 0;
}
int main()
{
sai();
ll t;cin>>t;
while(t--)
{
ll x;cin>>x;
if(check(x))
{
ll f=0,f1=0;
cout<<"noprime"<<endl;
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0) cout<<i<<" ";
while(x%i==0) x/=i;
}
if(x!=1) cout<<x<<endl;
else cout<<endl;
}
else
{
cout<<"isprime"<<endl;
cout<<x<<endl;
}
}
return 0;
}