RosettaCodeData/Task/Weird-numbers/EasyLang/weird-numbers.easy
2025-06-11 20:16:52 -04:00

56 lines
1,023 B
Text

func[] divisors n .
divs[] &= 1
for i = 2 to sqrt n
if n mod i = 0
j = n / i
divs[] &= i
if i <> j : divs2[] &= j
.
.
for i = len divs2[] downto 1
divs[] &= divs2[i]
.
return divs[]
.
func sum divs[] .
for e in divs[] : s += e
return s
.
func semiperf n divs[] .
if len divs[] = 0 : return 0
h = divs[$]
len divs[] -1
if n = h : return 1
if n > h
if semiperf (n - h) divs[] = 1 : return 1
.
return semiperf n divs[]
.
proc sieve limit &wierd[] .
len wierd[] limit
for j = 1 to limit
if j mod 6 <> 0 : wierd[j] = 1
.
for i = 2 step 2 to limit
if wierd[i] = 1
divs[] = divisors i
if i > sum divs[]
wierd[i] = 0
elif semiperf i divs[] = 1
for j = i step i to limit
wierd[j] = 0
.
.
.
.
.
sieve 20000 wierd[]
i = 2
repeat
if wierd[i] = 1
cnt += 1
write i & " "
.
until cnt = 25
i += 2
.