49 lines
929 B
Text
49 lines
929 B
Text
F divisors(n)
|
||
V divs = [1]
|
||
[Int] divs2
|
||
V i = 2
|
||
L i * i <= n
|
||
I n % i == 0
|
||
V j = n I/ i
|
||
divs [+]= i
|
||
I i != j
|
||
divs2 [+]= j
|
||
i++
|
||
R divs2 [+] reversed(divs)
|
||
|
||
F abundant(n, divs)
|
||
R sum(divs) > n
|
||
|
||
F semiperfect(n, divs) -> Bool
|
||
I !divs.empty
|
||
V h = divs[0]
|
||
V t = divs[1..]
|
||
I n < h
|
||
R semiperfect(n, t)
|
||
E
|
||
R n == h | semiperfect(n - h, t) | semiperfect(n, t)
|
||
E
|
||
R 0B
|
||
|
||
F sieve(limit)
|
||
V w = [0B] * limit
|
||
L(i) (2 .< limit).step(2)
|
||
I w[i]
|
||
L.continue
|
||
V divs = divisors(i)
|
||
I !abundant(i, divs)
|
||
w[i] = 1B
|
||
E I semiperfect(i, divs)
|
||
L(j) (i .< limit).step(i)
|
||
w[j] = 1B
|
||
R w
|
||
|
||
V w = sieve(17'000)
|
||
V count = 0
|
||
print(‘The first 25 weird numbers:’)
|
||
L(n) (2..).step(2)
|
||
I !w[n]
|
||
print(n, end' ‘ ’)
|
||
count++
|
||
I count == 25
|
||
L.break
|