筛法
我发现了,这种题还是挺容易卡时间的
要多用筛法防止超时
这题就是一个简单的质因数分解。
如果当前的数有至少两个质因数的话
那么就ok否则就no
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int,int> pii;
const int max_n = 5e5+100;
const int max_m = 1e7+100;
pii ans[max_n];
int n;
int isprime[max_m];
int prime[max_m];
int main(){
fill(prime,prime+max_m,-1);
for (int i=2;i<=10000000;++i){
if (isprime[i]!=0)continue;
for (int j=i+i;j<=10000000;j+=i){
isprime[j]++;
prime[j]=i;
}
}
scanf("%d",&n);
for (int i=1;i<=n;++i){
int num;scanf("%d",&num);
if (isprime[num]<2)ans[i]=pii(-1,-1);
else {
int f = prime[num];
while (num%f==0)num/=f;
ans[i]=pii(f,num);
}
}
for (int i=1;i<=n;++i)printf("%d ",ans[i].first);printf("\n");
for (int i=1;i<=n;++i)printf("%d ",ans[i].second);
}
京公网安备 11010502036488号