1.11 最大公約数を求める。
2 整数の最大公約数を求めます。以下の条件を満たせば、必ずしも整数型でなくてもかまいません。
- 代入可能である
<演算子が使用可能%演算子が使用可能
template<class T>
T gcd(T m, T n)
{
if (m < T(0) || n < T(0))
{
return T(-1);
}
T r;
while (T(0) < n)
{
r = m % n;
m = n;
n = r;
}
return m;
}
以下は、再帰を利用したメタ関数版です。
template<unsigned long M, unsigned long N>
struct tgcd
{
static const unsigned int value = tgcd<N, M % N>::value;
};
template<unsigned long M>
struct tgcd<M, 0UL>
{
static const unsigned long value = M;
};
元ネタ
ブックナビゲーション
- 技術情報
- Boost C++ Libraries メモ
- C++と組込み環境
- C++サンプル集
- C++テンプレート集
- 1. 整数型に関するテンプレート
- 1.1 指定された整数型が符号付きか否かを判定する。
- 1.2 指定された整数型が 2 の補数表現か否かを判定する。
- 1.3 指定された整数型が1の補数表現か否かを判定する。
- 1.4 指定された整数型が「符号ビット+絶対値」か否かを判定する。
- 1.5 指定された整数型が表現可能な最小値および最大値を返す。
- 1.6 各種整数型の仕様を調べるテストプログラム
- 1.7 整数除算で端数切り上げ(商のみ)
- 1.8 整数除算で端数切り上げ(商+剰余)
- 1.9 整数除算で端数切り下げ(商+剰余)
- 1.10 整数除算(商+剰余, 標準 C ライブラリの汎用版)
- 1.11 最大公約数を求める。
- 1.12 無符号整数の最下位の '1' のビットだけを抽出する。
- 2. 数値型に関するテンプレート
- 3. 配列に関するテンプレート
- 4. 構造体に関するテンプレート
- 5. 一般のデータ型に関するテンプレート
- 6. メモリ上のデータ操作テンプレート
- 7. 文字・文字列・文字コードに関するテンプレート
- 8. 入出力に関するテンプレート
- 9. エンディアンに関するテンプレート
- 10. 日付・グレゴリオ暦計算テンプレート
- 11. 双方向線型リスト処理テンプレート
- 101. 整数型に関するテンプレート(オリジナル)
- 102. 文字種別に関するテンプレート(オリジナル)
- 103. 入出力に関するテンプレート(オリジナル)
- 1. 整数型に関するテンプレート
- C++プログラマのためのC言語入門
- C/C++迷信集
- C99関数・マクロ・前処理スクリプト集
- C言語再入門
- C言語徹底入門
- Drupal メモ
- TOPPERS 情報
- ベターCとしてのC++
- マイコン メモ
- ライブラリ開発入門
- 分割コンパイルをきわめる
- 擬似プロセッサを作る
- 象の卵を探して...
- 車輪の再発明
- 過去の情報

