fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4.  
  5. unsigned int gcd(unsigned int u, unsigned int v) {
  6. if(u==v) return u;
  7. if(u==0) return v;
  8. if(v==0) return u;
  9. if(~u & 1) {
  10. if(v & 1) return gcd(u>>1, v);
  11. else return gcd(u>>1, v>>1) <<1;
  12. }
  13. if(~v & 1) return gcd(u, v>>1);
  14. if(u>v) return gcd((u-v)>>1, v);
  15. return gcd((v-u)>>1, u);
  16. }
  17.  
  18. int main() {
  19. int t, n, c[1005], a, b;
  20. scanf("%d", &t);
  21. while(t--) {
  22. scanf("%d", &n);
  23. if(n==1) { scanf("%d", &a); printf("%d\n", a); }
  24. if(n==2) { scanf("%d %d", &a, &b); printf("%d\n", gcd(a, b)); }
  25. if(n>2) {
  26. for(int i=0; i<2; i++) {
  27. scanf("%d %d", &a, &b); a=gcd(a, b); break;
  28. }
  29. for(int i=2; i<n; i++) {
  30. scanf("%d", &b); a=gcd(a, b);
  31. }
  32. printf("%d\n", a);
  33. }
  34. }
  35. return 0;
  36. }
Success #stdin #stdout 0s 3344KB
stdin
3
2
10 12
2
5 9
3
6 10 15
stdout
2
1
1