54 lines
1.3 KiB
Text
54 lines
1.3 KiB
Text
' Abundant odd numbers
|
|
DECLARE FUNCTION DivisorSum& (N AS LONG)
|
|
' First 25 odd abundant numbers
|
|
CONST TRUE% = -1, FALSE% = 0
|
|
DIM OddNumber AS LONG, Acount AS LONG, DSum AS LONG
|
|
DIM Found AS INTEGER
|
|
OddNumber = 1
|
|
Acount = 0
|
|
DSum = 0
|
|
PRINT "The first 25 abundant odd numbers:"
|
|
DO WHILE Acount < 25
|
|
DSum = DivisorSum&(OddNumber)
|
|
IF DSum > OddNumber THEN
|
|
Acount = Acount + 1
|
|
PRINT USING "######"; OddNumber;
|
|
PRINT " proper divisor sum: ";
|
|
PRINT USING "######"; DSum
|
|
END IF
|
|
OddNumber = OddNumber + 2
|
|
LOOP
|
|
' 1000th odd abundant number
|
|
DO WHILE Acount < 1000
|
|
DSum = DivisorSum&(OddNumber)
|
|
IF DSum > OddNumber THEN Acount = Acount + 1
|
|
OddNumber = OddNumber + 2
|
|
LOOP
|
|
PRINT "1000th abundant odd number:"
|
|
PRINT " "; OddNumber - 2; "proper divisor sum:"; DSum
|
|
' first odd abundant number > 1000000000
|
|
OddNumber = 1000000001
|
|
Found = FALSE%
|
|
DO WHILE NOT Found
|
|
DSum = DivisorSum&(OddNumber)
|
|
IF DSum > OddNumber THEN
|
|
Found = TRUE%
|
|
PRINT "First abundant odd number > 1 000 000 000:"
|
|
PRINT " "; OddNumber; "proper divisor sum:"; DSum
|
|
END IF
|
|
OddNumber = OddNumber + 2
|
|
LOOP
|
|
END
|
|
|
|
FUNCTION DivisorSum& (N AS LONG)
|
|
DIM D AS LONG, OtherD AS LONG, Sum AS LONG
|
|
Sum = 1
|
|
FOR D = 2 TO INT(SQR(N))
|
|
IF N MOD D = 0 THEN
|
|
Sum = Sum + D
|
|
OtherD = N \ D
|
|
IF OtherD <> D THEN Sum = Sum + OtherD
|
|
END IF
|
|
NEXT D
|
|
DivisorSum& = Sum
|
|
END FUNCTION
|