46 lines
1.4 KiB
Text
46 lines
1.4 KiB
Text
func IsPrime(N); \Return 'true' if N is prime
|
|
int N, D;
|
|
[if N < 2 then return false;
|
|
if (N&1) = 0 then return N = 2;
|
|
if rem(N/3) = 0 then return N = 3;
|
|
D:= 5;
|
|
while D*D <= N do
|
|
[if rem(N/D) = 0 then return false;
|
|
D:= D+2;
|
|
if rem(N/D) = 0 then return false;
|
|
D:= D+4;
|
|
];
|
|
return true;
|
|
];
|
|
|
|
char Prime(1_000_000), S;
|
|
int Diff, Diffs, Count, N, I, First, Last;
|
|
int Str, Len;
|
|
[for N:= 0 to 1_000_000-1 do
|
|
Prime(N):= if IsPrime(N) then ^1 else ^0;
|
|
Diffs:= [[2, 0, 0], [1, 0, 0], [2, 2+2, 0], [2, 4+2, 0], [4, 2+4, 0], [6, 4+6, 2+4+6]];
|
|
Str:= [ "101 ", "11 ", "10101 ", "1010001 ", "1000101 ", "1000001000101 "];
|
|
Len:= [ 3, 2, 5, 7, 7, 13];
|
|
for Diff:= 0 to 6-1 do
|
|
[Count:= 0;
|
|
for N:= 0 to 1_000_000-1 -13 do
|
|
[S:= Str(Diff);
|
|
for I:= 0 to Len(Diff)-1 do
|
|
if S(I) # Prime(N+I) then I:= 100;
|
|
if I < 100 then \have match
|
|
[Count:= Count+1;
|
|
if Count = 1 then First:= N;
|
|
Last:= N;
|
|
];
|
|
];
|
|
Text(0, "First: "); IntOut(0, First);
|
|
for I:= 0 to 2 do
|
|
if Diffs(Diff,I) # 0 then
|
|
[ChOut(0, ^ ); IntOut(0, First+Diffs(Diff,I))];
|
|
Text(0, " Last: "); IntOut(0, Last);
|
|
for I:= 0 to 2 do
|
|
if Diffs(Diff,I) # 0 then
|
|
[ChOut(0, ^ ); IntOut(0, Last+Diffs(Diff,I))];
|
|
Text(0, " Groups: "); IntOut(0, Count); CrLf(0);
|
|
];
|
|
]
|