fork download
  1. // Greatest Common Denominator (Multi-argument; C++14 version).
  2.  
  3. #include <type_traits>
  4. #include <iostream>
  5.  
  6. template<typename M, typename N>
  7. std::common_type_t<M, N>
  8. gcd(M m, N n)
  9. {
  10. if (n == 0)
  11. return m;
  12. return gcd(n, m % n);
  13. }
  14.  
  15. template<typename M, typename N, typename... Rest>
  16. std::common_type_t<M, N, Rest...>
  17. gcd(M m, N n, Rest... rest)
  18. {
  19. return gcd(m, gcd(n, rest...));
  20. }
  21.  
  22. // Main.
  23.  
  24. int main()
  25. {
  26. std::cout << gcd(1, 2) << std::endl;
  27. std::cout << gcd(2, 4, 6) << std::endl;
  28. std::cout << gcd(3, 6, 9, 12) << std::endl;
  29. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
1
2
3