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

49 lines
1.5 KiB
Text

100 REM Abundant odd numbers
110 DECLARE EXTERNAL FUNCTION DivisorSum
120 REM first 25 odd abundant numbers
130 LET OddNumber = 1
140 LET ACount = 0
150 LET DSum = 0
160 PRINT "The first 25 abundant odd numbers:"
170 DO WHILE ACount < 25
180 LET DSum = DivisorSum(OddNumber)
190 IF DSum > OddNumber THEN
200 LET ACount = Acount + 1
210 PRINT USING "######": OddNumber;
220 PRINT " proper divisor sum: ";
230 PRINT USING "######": DSum
240 END IF
250 LET OddNumber = OddNumber + 2
260 LOOP
270 REM 1000th odd abundant number
280 DO WHILE ACount < 1000
290 LET DSum = DivisorSum(OddNumber)
300 IF DSum > OddNumber THEN LET ACount = Acount + 1
310 LET OddNumber = OddNumber + 2
320 LOOP
330 PRINT "1000th abundant odd number:"
340 PRINT " "; OddNumber - 2; "proper divisor sum:"; DSum
350 REM first odd abundant number > 1000000000
360 LET OddNumber = 1000000001
370 LET Found = 0
380 DO WHILE Found = 0
390 LET DSum = DivisorSum(OddNumber)
400 IF DSum > OddNumber THEN
410 LET Found = 1
420 PRINT "First abundant odd number > 1 000 000 000:"
430 PRINT " "; OddNumber; "proper divisor sum:"; DSum
440 END IF
450 LET OddNumber = OddNumber + 2
460 LOOP
470 END
480 External Function DivisorSum(N)
490 LET Sum = 1
500 FOR D = 2 TO INT(SQR(N))
510 IF MOD(N, D) = 0 THEN
520 LET Sum = Sum + D
530 LET OtherD = INT(N / D)
540 IF OtherD <> D THEN LET Sum = Sum + OtherD
550 END IF
560 NEXT D
570 LET DivisorSum = Sum
580 END FUNCTION