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の値の変化(左から右へ) | |||||||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | |
1911 | → | ! | ||||||||||
637 | → | → | → | → | → | ! | ||||||
91 | → | → | → | → | → | ! | ||||||
13 | → | → | → | → | → | → | → | → | → | → | → | ! |
1 |
結局このプログラムでは,整数1911の素因数分解をやっていることになります.結果は3,7,7,13となります.
26.1.3.8 二重の繰返し | 26.1.3.9 素因数分解 | 26.1.4 判断をしよう | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Mon, 26 Apr 2004 03:43:36 JST (1922d) |