SRM 162 DIV2 Level One - 最小公倍数
C++ではあんまり解きたくない問題。
4,5,6とか範囲が与えられるので、最小公倍数を求める。
#include <vector> using namespace std; class LCMRange { public: static int lcm(int first, int last) { vector<int> numbers; int acc = 1; for (int i = first; i <= last; i++) numbers.push_back(i); for (int i = 0; i < numbers.size(); i++) { for(int j = i + 1; j < numbers.size(); j++) if (numbers[j] % numbers[i] == 0) numbers[j] /= numbers[i]; acc *= numbers[i]; } return acc; } };
全然イメージが広がらない。
今後使いそうなのでgcdとlcmを作ってみた。
int gcd(int a,int b) { return (b == 0) ? a : gcd(b, a % b); } int global_lcm(int a, int b) { return a * b / gcd(a, b); } class LCMRange { public: static int lcm(int first, int last) { int acc = 1; for (int i = first; i <= last; i++) acc = global_lcm(i, acc); return acc; } };
おっかしいな、lcm使うとスタックオーバフローするんだよ。と思ったら、LCMRange::lcmでlcm使ってる!!
再帰しまくってた(汗