' 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