|
友愛数・婚約数
https://ja.wikipedia.org/wiki/婚約数
OPTION BASE 0
LET KMAX=100000
DIM A(KMAX),B(200),C(200)
FOR I=2 TO KMAX
IF A(I)=0 THEN
FOR J=I*I TO KMAX STEP I !'エラトステネスの篩
LET A(J)=1 !'倍数に印をつける
NEXT J
END IF
NEXT I
FOR I=2 TO KMAX
IF A(I)=1 THEN !'素数でないなら
CALL CALC(I,B,P,L1)
CALL CALC(P,C,Q,L2)
IF I=Q AND I<=P THEN !'友愛数の時、完全数含む
PRINT I;":";
FOR K=0 TO L1-1
PRINT B(K);
NEXT K
PRINT
PRINT P;":";
FOR K=0 TO L2-1
PRINT C(K);
NEXT K
PRINT
PRINT
END IF
END IF
NEXT I
END
EXTERNAL SUB CALC(K,B(),SUM,L) !'Kの約数の和を求める
MAT B=ZER
LET L=0
LET SUM=1 !' SUM=0 ...婚約数 or SUM=1 ...友愛数
IF SUM=1 THEN
LET B(0)=1
LET L=L+1
END IF
FOR J=2 TO INT(SQR(K))
LET R=MOD(K,J)
IF R=0 THEN
LET SUM=SUM+J
LET B(L)=J
LET L=L+1
IF J<>K/J THEN !'平方数でないなら
LET SUM=SUM+K/J
LET B(L)=K/J
LET L=L+1
END IF
END IF
NEXT J
END SUB
|
|