26.1.3.9 素因数分解

vとxの値のうつり変りを見てみましょう.

v=1911
  x=2 割り切れず
  x=3 割り切れる  --->3を出力
  v←1911/3(=637)
v=637
  x=2,3,4,5,6 割り切れず
  x=7 割り切れる  --->7を出力
  v←637/7(=91)
v=91
  x=2,3,4,5,6 割り切れず
  x=7 割り切れる  --->7を出力
  v←91/7(=13)
v=13
  x=2,3,4,5,6,7,8,9,10,11,12 割り切れず
  x=13 割り切れる --->13を出力
  v←13/13(=1)
v=1
(終了)

まず,内側のwhile部分では,その時点でのvの値を2,3,4,…,vで割った余りを調べています.どこかで余りがゼロになればそこで終りです.つまりこれはvの最小の約数を求めていることになります.vが素数であっても,v自身で割れば余りはゼロですから,このwhileは必ず停止します.

外側のwhile部分では,vの値が,最小の約数で割られる形で減少してゆきます.約数は2以上で探していますから,vの値は必ず減少することがポイントです.最後にはvの値が素数になって,自分自身で割られて結果が1になりますから,v=1が終了条件になります.値の変化を表で示します.各行が内側のwhileに対応します.

vの値xの値の変化(左から右へ)
2345678910111213
1911!
637!
91!
13!
1

結局このプログラムでは,整数1911の素因数分解をやっていることになります.結果は3,7,7,13となります.