Project Euler 5
2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest number that is evenly divisible by all of the numbers from 1 to 20?
2520は1から10までの全ての整数の最小公倍数である。 1から20までの全ての整数の最小公倍数を求めなさい。
C/C++
#include <iostream> using namespace std; int gcd(int,int); int lcm(int,int); int main(){ int ans=1; for(int i=1 ; i<=20 ; i++){ ans = lcm(ans, i); } cout << ans << endl; } // 最大公約数 int gcd( int m, int n ) { // 引数に0がある場合は0を返す if ((0==m) || (0==n)) return 0; // ユークリッドの方法 while( m != n ){ if ( m > n ) m -= n; else n -= m; } return m; } // 最小公倍数 int lcm( int m, int n ){ // 引数に0がある場合は0を返す if ((0==m) || (0==n)) return 0; return ((m / gcd(m, n)) * n); // lcm = m * n / gcd(m,n) }
gcdとlcmググってコピペ余裕でした