,
を自然数とするときその最大公約数 (Greatest Common Divisor, GCD)
とは,
と
を共に割り切る数で最大のものである.
この数は
と
を素因数分解すれば求まるが,
実は素因数分解で GCD を求めるのは効率がわるい.
この章では, GCD 計算の高速アルゴリズムである Euclid の互除法を
説明し, あわせて計算の効率を議論する計算量 (computational complexity)
の理論への入門を試みる.
def prime_factorization(N) { K = 2; while (N>=2) { if (N % K == 0) { N = idiv(N,K); print(K,0); print(", ",0); }else{ K = K+1; } } print(" "); }
|
N % K は N を K で割った
余り. idiv(N,K) は N を K で割ったときの
商をあらわす.
このプログラムでは, K で試しに N をわってみて
割り切れたら, 因子として出力する.
N が 60 の時の変数の変化:
問: この表を完成し, プログラムの動きを説明せよ. |