RosettaCodeData/Task/Perfect-numbers/CBASIC/perfect-numbers.basic

29 lines
656 B
Plaintext

rem - return true (-1) if n is perfect, otherwise 0
def fn.isperfect%(n%)
sum% = 1 : rem 1 is a divisor of every number
f1% = 2
f2% = 1 : rem dummy value to start
while (f1% * f1%) <= n%
if n% = (n% / f1%) * f1% then \
sum% = sum% + f1% : \
f2% = n% / f1% : \
sum% = sum% + f2%
rem don't double count sqrt of perfect square!
if f1% = f2% then sum% = sum% - f2%
f1% = f1% + 1
wend
fn.isperfect% = (sum% = n%)
return
fend
print "Searching to 10000 for perfect numbers"
count% = 0
for i% = 2 to 10000
if fn.isperfect%(i%) then \
print i% : count% = count% + 1
next i%
print count%; "were found"
end