题目:
题意:
如果n的两个因数d1,d2,能构造gcd(d1+d2,n)=1。就输出d1和d2。
如果不行就输出两个-1。
题解:
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=1e7+5;
int f[N],p[N],ans;
int a[N/10],b[N/10];
void init()
{
for(int i=2;i<N;i++)
{
if(!f[i])p[++ans]=i;
for(int j=1;j<=ans&&p[j]*i<N;j++)
{
f[p[j]*i]=p[j];
if(i%p[j]==0)break;
}
}
}
int main()
{
init();
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int k;
scanf("%d",&k);
//cout<<f[k]<<endl;
if(!f[k])a[i]=-1,b[i]=-1;
else
{
int num=f[k];
//cout<<num<<endl;
while(k%num==0)k/=num;
if(k==1)
{
a[i]=-1,b[i]=-1;
}
else
{
a[i]=num,b[i]=k;
}
}
}
for(int i=1;i<n;i++)printf("%d ",a[i]);
printf("%d\n",a[n]);
for(int i=1;i<n;i++)printf("%d ",b[i]);
printf("%d\n",b[n]);
}