fork(1) download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. int nwd( int a , int b );
  5.  
  6. int main()
  7. {
  8. int number_a = 0 , number_b = 0 , how_many_steps = 0 , result = 0 ;
  9. std::cin >> how_many_steps ;
  10. while (how_many_steps > 0)
  11. {
  12. --how_many_steps;
  13. std::cin >> number_a >> number_b;
  14. if ( number_a != 0 && number_b != 0 )
  15. {
  16. result = nwd( number_a , number_b );
  17. std::cout << result << std::endl;
  18. }
  19. }
  20. return 0;
  21. }
  22. int nwd ( int a , int b )
  23. {
  24. std::vector <int> divisor_number_c;
  25. std::vector <int> divisor_number_d;
  26. int final_count = 1;
  27. int number_c = 0 , number_d = 0 ;
  28. number_c = a ;
  29. number_d = b ;
  30.  
  31. if ( a == 1 || b == 1 )
  32. {
  33. return 1;
  34. }
  35. else if ( a > 1 && b > 1 )
  36. {
  37. while ( number_c != 1 )
  38. {
  39. if ( number_c % 2 == 0 )
  40. {
  41. number_c /= 2;
  42. divisor_number_c.push_back(2);
  43. }
  44. else if ( number_c % 3 == 0 )
  45. {
  46. number_c /= 3;
  47. divisor_number_c.push_back(3);
  48. }
  49. else if ( number_c % 5 == 0 )
  50. {
  51. number_c /= 5;
  52. divisor_number_c.push_back(5);
  53. }
  54. else if ( number_c % 7 == 0 )
  55. {
  56. number_c /= 7;
  57. divisor_number_c.push_back(7);
  58. }
  59. else if ( number_c % number_c == 0 )
  60. {
  61. divisor_number_c.push_back(number_c);
  62. number_c /= number_c ;
  63. }
  64. }
  65. while ( number_d != 1 )
  66. {
  67. if ( number_d % 2 == 0 )
  68. {
  69. number_d /= 2;
  70. divisor_number_d.push_back(2);
  71. }
  72. else if ( number_d % 3 == 0 )
  73. {
  74. number_d /= 3;
  75. divisor_number_d.push_back(3);
  76. }
  77. else if ( number_d % 5 == 0 )
  78. {
  79. number_d /= 5;
  80. divisor_number_d.push_back(5);
  81. }
  82. else if ( number_d % 7 == 0 )
  83. {
  84. number_d /= 7;
  85. divisor_number_d.push_back(7);
  86. }
  87. else if ( number_d % number_d == 0 )
  88. {
  89. divisor_number_d.push_back(number_d);
  90. number_d /= number_d ;
  91. }
  92. }
  93. for ( int i = 0 ; i < divisor_number_c.size() ; ++i)
  94. {
  95. int index = 0 ;
  96. for ( int j = 0 ; j < divisor_number_d.size() ; ++j)
  97. {
  98. if ( divisor_number_c[i] == divisor_number_d[j] && index == 0)
  99. {
  100. divisor_number_d.erase(divisor_number_d.begin()+j);
  101. final_count *= divisor_number_c[i];
  102. ++index;
  103. }
  104. }
  105. }
  106. return final_count;
  107. }
  108. }
  109.  
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Standard output is empty