29 lines
656 B
Plaintext
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
|