QUQ
思路
求出a1的所有约数,与a1、ai放入同一数组;
求出gcd(a1,ai);
枚举约数,得出ans;
代码实现
1 #include<cmath> 2 #include<cstdio> 3 #define LL long long 4 const int maxn=1e5+1; 5 int n; 6 LL v[maxn],s[maxn],ans,vs; 7 inline LL gcd(LL x,LL y){return x%y?gcd(y,x%y):y;} 8 int main(){ 9 scanf("%d",&n); 10 for(int i=1;i<=n;i++) scanf("%lld",&s[i]); 11 s[0]=sqrt(s[1]); 12 for(int i=2;i<=s[0];i++) 13 if(s[1]%i==0) v[vs++]=i; 14 v[vs++]=s[1]; 15 for(int i=1;i<=n;i++){ 16 ans=gcd(s[1],s[i]); 17 v[vs]=s[i]; 18 if(ans==1){printf("-1 ");continue;} 19 for(int j=0;j<=vs;j++) 20 if(s[i]%v[j]==0){ 21 printf("%lld ",ans/v[j]); 22 break; 23 } 24 } 25 return 0; 26 }