問題
次のBASICによるプログラムを実行するとき,以下の問に答えよ.
10 INPUT N
20 S=0
30 M=2*INT(N/2)+1
40 FOR K=1 TO M STEP 2
50 X=N-K*INT(N/K)
60 IF X>0 THEN GOTO 80
70 S=S+K
80 NEXT K
90 PRINT S
100 END
(1) 入力が12のとき出力はいくらか.
(2) 出力が1となるような自然数の入力はどのような数か.
(3) 範囲の自然数を入力するとき,出力が1より大きな奇数となるをすべて求めよ.
方針
プログラムの各行を数式に直し、 が奇数だけを動くこと、50行目の が を で割った余りであることを読む。したがって出力は の正の奇数約数の和である。(3)では奇数約数の和が奇数になる条件を、奇数部分が平方数であることに言い換えて列挙する。
解答
(1)
30行目で としているので、40行目から80行目のループでは という奇数だけを調べる。50行目の は、 を で割った余りである。したがって、70行目で加えられるのは を割り切る奇数 だけである。 の正の奇数約数は
であるから、出力は である。
(2)
出力が1となるのは、正の奇数約数が1しかないときである。これは が奇数の素因数をもたないことと同値である。したがって の形の自然数がすべて求める入力である。
(3)
と書く。ただし は奇数とする。プログラムの出力は の正の約数の和である。 を と素因数分解すると、約数の和は
である。各 は奇数なので、 の偶奇は項数 の偶奇で決まる。よって約数の和が奇数であるための条件は、すべての が偶数、すなわち が平方数であることである。
出力が1より大きい奇数になるには、 が1より大きい奇数平方数であればよい。 の範囲で、奇数平方数としてあり得る は
である。これらに2のべき乗を掛けて50以下に収めると を得る。したがって求める自然数は である。