42 lines
1.1 KiB
Text
42 lines
1.1 KiB
Text
program magnanimous;
|
|
n := -1;
|
|
loop for i in [1..400] do
|
|
loop until magnanimous(n) do n +:= 1; end loop;
|
|
|
|
case i of
|
|
(1): print("1 - 45:");
|
|
(241): print; print("241 - 250:");
|
|
(391): print; print("391 - 400:");
|
|
end case;
|
|
|
|
if i in [1..45] or i in [241..250] or i in [391..400] then
|
|
putchar(lpad(str n, 7));
|
|
if i mod 5 = 0 then print; end if;
|
|
end if;
|
|
end loop;
|
|
|
|
proc magnanimous(n);
|
|
return forall k in splitsums(n) | prime(k);
|
|
end proc;
|
|
|
|
proc splitsums(n);
|
|
s := str n;
|
|
return [val s(..i) + val s(i+1..) : i in [1..#s-1]];
|
|
end proc;
|
|
|
|
proc prime(n);
|
|
if n<2 then return false;
|
|
elseif even n then return(n = 2);
|
|
elseif n mod 3=0 then return(n = 3);
|
|
else
|
|
d := 5;
|
|
loop while d*d <= n do
|
|
if n mod d=0 then return false; end if;
|
|
d +:= 2;
|
|
if n mod d=0 then return false; end if;
|
|
d +:= 4;
|
|
end loop;
|
|
return true;
|
|
end if;
|
|
end proc;
|
|
end program;
|