RosettaCodeData/Task/Abundant-odd-numbers/QuickBASIC/abundant-odd-numbers.basic
2026-04-30 12:34:36 -04:00

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