2011-06-22 8 views
4

2つの入力された数字が互いに素である(共通の要因なし)かどうかを判断するために、C++で関数を作成する方法はありますか? たとえば、 "1,3"は有効ですが、 "2,4"は有効ではありません。相対プライム番号

+1

これは宿題の問題ですか? – mikerobi

+4

[ユークリッドアルゴリズム](http://en.wikipedia.org/wiki/Euclidean_algorithm) –

+2

スタインのアルゴリズムまたはバイナリGCDを参照してください。そして、宿題。 –

答えて

10

は、ここでのコードの6行でユークリッドのアルゴリズムは次のとおりです。

追加するを更新しました
bool RelativelyPrime (int a, int b) { // Assumes a, b > 0 
    for (; ;) { 
    if (!(a %= b)) return b == 1 ; 
    if (!(b %= a)) return a == 1 ; 
    } 
} 

:私はthis answer from Omnifariousによって、難読化されており、誰がプログラムgcd機能をしたがって:

constexpr unsigned int gcd(unsigned int const a, unsigned int const b) 
{ 
    return (a < b) ? gcd(b, a) : ((a % b == 0) ? b : gcd(b, a % b)); 
} 

は、だから今、私たちはRelativelyPrimeの3行のバージョンを持っています10

bool RelativelyPrime (int a, int b) { // Assumes a, b > 0 
    return (a<b) ? RelativelyPrime(b,a) : !(a%b) ? (b==1) : RelativelyPrime (b, a%b); 
} 
+4

-1 – starblue

+4

+1の "ひどい"コードスタイル。私はそれを読んでグースバンプを持っています。 – hardmath

+1

+1恐ろしいコードのスタイル - それはユークリッドを尊重します。それがどのように機能するかについての簡単で明確な説明は、驚くべき定理の純粋な天才を欠いている。 – DaveWalley

5

Greatest Common Denominatorを計算するための多くのアルゴリズムの1つです。ジム・クレイさん事も無げコメントによって行動に亜鉛メッキ

+0

KnizのAOCP v.2(Seminumerical Algorithms)は、いくつかのアプローチの効率性についての優れた分析を行っています。恐ろしいコードスタイルのために – hardmath

関連する問題