2.友愛数(amicable number)


この fnSigma(N) を使って、小さい方が 1010 以下の友愛数を求める。
プログラムは以下のとおり。

 10   '
 20   for M=2 to 10^9
 30     N=fnSigma(M)-M:if N<=M then 50
 40     R=fnSigma(N)-N:if R=M then print M,N
 50   next M
 60   end
 70   fnSigma(N)
 80   local W,S,P
 90   S=1
100   W=1:P=prmdiv(N)
110   if N@P=0 then W=W*P+1:N=N\P:goto 110 else S=S*W
120   if N>1 then 100 else return(S)

30行目は重複をさけるためのもので、友愛数の組を、小さい方をたよりに、
もう一方を探す、という方針で探査している。
等号が入っているのは、完全数を除去するため。
UBASIC の for 〜 next は、2^32-5 (= 4.2×10^9) までなので、
10^10 までの探査を行う場合は、if 〜 then 〜 goto でループを回す必要がある。
 
小さい方が 1010以下の友愛数はこちら1427組ある。


この章の目次

E-mail : kc2h-msm@asahi-net.or.jp
三島 久典