サンプルの動作確認バージョン [GCC4.4/1.40.0] [VC9/1.40.0]
#include <iostream>
#include <algorithm>
#include <boost/math/common_factor.hpp>
using namespace std;
int main()
{
cout << "6 と 15 の最大公約数は "
<< boost::math::gcd(6, 15) << " で、最小公倍数は "
<< boost::math::lcm(6, 15) << " です。"
<< endl;
// 関数オブジェクトとして使う。
int a[] = {4, 5, 6}, b[] = {7, 8, 9}, c[3];
transform( a, a+3, b, c, boost::math::gcd_evaluator<int>() );
for( int i=0; i<3; ++i )
cout << "gcd(" << a[i] << "," << b[i] << ") = "
<< c[i] << endl;
return 0;
}
6 と 15 の最大公約数は 3 で、最小公倍数は 30 です。 gcd(4,7) = 1 gcd(5,8) = 1 gcd(6,9) = 3
最大公約数です。最小公倍数です。ユークリッドの互除法です。
int
などだけでなく、%
で剰余計算ができて、
ゼロと比較できる型ならユーザー定義型に対しても使えます。
整数定数が相手ならば、コンパイル時に計算する版
boost::math::static_gcd<8, 15>::value
なんてのもある模様。