この 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組ある。
前 | この章の目次 | 次 |
---|