感觉是线性筛的变形之类的东西
想了好久想不出来
看了题解才发现 这么简单
题解的偏分也是写不出来
#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int INF = 1e9;
const int MAXN = 1e5+10;
#define LL long long
LL gcd(LL x,LL y)
{
if(y==0) return x;
return gcd(y,x%y);
}
LL yue[MAXN];int tot;
LL solve(LL a1,LL tmp)
{
LL x=gcd(a1,tmp);//cout<<"*"<<x<<endl;
for(int i=1;i<=tot;i++)
if(tmp%yue[i]==0) return x/yue[i];
return -1;
}
void pre(LL a1)
{
LL x=sqrt(a1);
for(int i=2;i<=x;i++)
{
if(a1%i==0)
{
while(a1%i==0) a1/=i;
yue[++tot]=i;
}
}
if(a1!=1) yue[++tot]=a1;
}
int n;
int main()
{
scanf("%d",&n);
LL tmp,a1;
scanf("%lld",&a1);
pre(a1);
// for(int i=1;i<=tot;i++) cout<<yue[i]<<' ';
printf("%lld ",solve(a1,a1));
for(int i=1;i<n;i++)
{
scanf("%lld",&tmp);
printf("%lld ",solve(a1,tmp));
}
return 0;
}
A. 【UR #3】核聚变反应强度