数学1001 素数判断
链接:https://ac.nowcoder.com/acm/contest/26656/1001
来源:牛客网
题目描述
输入描述:
输出描述:
对于每组询问输出两行表示结果。
第1行,如果x是素数,输出“isprime”(不含双引号),否则输出“noprime”(不含双引号)。
第2行,输出x的素因子。
分析
写麻烦了, 如果用两个大于根号x 的因子,那这个数必然大于x ,所以只有一个大于根号x 的因子,把所有其它因子除完后剩下一个数如果大于1,就是x 的大于根号x 的因子。
不需要另外一个vector存所有因子
//-------------------------代码----------------------------
//#define int ll
const int N = 1e5+10;
int n,m;
void check(int x) {
bool flag = 1;
V<int>q;
for(int i = 2;i<= x/i;i++) {
if(x % i == 0) {
flag = 0;
q.pb(i);
while(x % i == 0) {
x /= i;
}
int tmp = x/i;
if(tmp > 1 && x % tmp == 0)q.pb(tmp);
}
}
if(x>1) {
q.pb(x);
}
if(flag) {
cout<<"isprime"<<endl;
cout<<x<<endl;
} else {
cout<<"noprime"<<endl;
sort(all(q));
q.erase(unique(all(q)),q.end());
for(auto t:q) {
cout<<t<<' ';
}
cout<<endl;
}
}
void solve()
{
cin>>n;
check(n);
}
signed main(){
clapping();TLE;
int t;cin>>t;while(t -- )
solve();
// {solve(); }
return 0;
}
/*样例区
*/
//------------------------------------------------------------