unsigned int gcd(unsigned int n, unsigned int m)
{
if (n == 0)
return m;
if (m == 0)
return n;
while (m! = n)
{
if (n > m)
n = n − m;
else
m = m − n;
}
return n;
}
whileループを使用する反復GCDアルゴリズムのためのいくつかの擬似コード。私は2で割り切れる場所がないので、対数ではないと思います。 whileループはNに正比例する時間実行されるので、O(N)のように線形になりますか?GCDアルゴリズムの実行時間?
これはバイナリGCDアルゴリズムの実装が壊れているようです:https://en.wikipedia.org/wiki/Binary_GCD_algorithm正しく実装されていると、O(log(m + n))ですが、これはO(m + n) –
@MattTimmermansアルゴリズムクラスで宿題を作るために、故意に非効率的なように壊れていると私を殴ることはありません。 –
@MattTimmermansそれはO(m + n)ですが、それは緊密な境界ではありません。 O((m + n)/ gcd(m、n))はより良い結びつきですが、私はそれもきついとは思いません。 –