37 lines
1 KiB
Text
37 lines
1 KiB
Text
func Chowla(N); \Return sum of divisors
|
|
int N, Div, Sum, Quot;
|
|
[Div:= 2; Sum:= 0;
|
|
loop [Quot:= N/Div;
|
|
if Quot < Div then quit;
|
|
if Quot = Div and rem(0) = 0 then \N is a square
|
|
[Sum:= Sum+Quot; quit];
|
|
if rem(0) = 0 then
|
|
Sum:= Sum + Div + Quot;
|
|
Div:= Div+1;
|
|
];
|
|
return Sum;
|
|
];
|
|
|
|
int N, C, P;
|
|
[for N:= 1 to 37 do
|
|
[IntOut(0, N); Text(0, ": ");
|
|
IntOut(0, Chowla(N)); CrLf(0);
|
|
];
|
|
C:= 1; \count 2 as prime
|
|
N:= 3; \only check odd numbers
|
|
repeat if Chowla(N) = 0 then \N is prime
|
|
C:= C+1;
|
|
case N+1 of 100, 1000, 10_000, 100_000, 1_000_000, 10_000_000:
|
|
[Text(0, "There are "); IntOut(0, C); Text(0, " primes < ");
|
|
IntOut(0, N+1); CrLf(0)]
|
|
other [];
|
|
N:= N+2;
|
|
until N >= 10_000_000;
|
|
P:= 1; \perfect numbers are of form: 2^(P-1) * (2^P - 1)
|
|
loop [P:= P*2;
|
|
N:= P*(P*2-1);
|
|
if N > 35_000_000 then quit;
|
|
if Chowla(N) = N-1 then \N is perfect
|
|
[IntOut(0, N); CrLf(0)];
|
|
];
|
|
]
|