fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <math.h>
  5. using namespace std;
  6.  
  7. int gcd(int u, int v) {
  8. if(u==v) return u;
  9. if(u==0) return v;
  10. if(v==0) return u;
  11. if(~u & 1) {
  12. if(v & 1) return gcd(u>>1, v);
  13. else return gcd(u>>1, v>>1)<<1;
  14. }
  15. if(~v & 1) return gcd(u, v>>1);
  16. if(u>v) return gcd((u-v)>>1, v);
  17. return gcd((v-u)>>1, u);
  18. }
  19.  
  20. int main() {
  21. /*int m, b[100005];
  22. m=100005;
  23. memset(b, 1, sizeof(b));
  24. b[0]=b[1]=0;
  25. for(int i=2; i<sqrt(m); i++) {
  26. if(!b[i]) continue;
  27. for(int j=i+i; j<m; j+=i) {
  28. if(b[j]) b[j]=0;
  29. }
  30. }*/
  31. int t, n, a[100005], c;
  32. scanf("%d", &t);
  33. while(t--) {
  34. scanf("%d", &n);
  35. for(int i=0; i<n; i++) scanf("%d", &a[i]);
  36. c=a[0];
  37. for(int i=0; i<n; i++) {
  38. c=gcd(c, a[i]);
  39. if(c==1) break;
  40. }
  41. if(c==1) printf("-1\n");
  42. else {
  43. for(int i=2; i<=sqrt(c); i+=i) {
  44. if(c%i==0) c=i;
  45. }
  46. printf("%d\n", c);
  47. }
  48. }
  49. return 0;
  50. }
Success #stdin #stdout 0s 3612KB
stdin
1
2
20 25
stdout
5