33 lines
905 B
Text
33 lines
905 B
Text
create or replace function primep(nnumber) as (
|
|
select
|
|
case
|
|
when nnumber < 2 then false
|
|
when nnumber = 2 then true
|
|
else NOT exists
|
|
( select * from
|
|
( select (nnumber % anumber) as modNumber
|
|
from (select unnest(range(2, 1 + sqrt(nnumber)::BIGINT)) as anumber)
|
|
)
|
|
where modNumber = 0
|
|
)
|
|
end
|
|
);
|
|
|
|
create or replace function task(start, mx) as table (
|
|
with recursive cte as (
|
|
select start::HUGEINT as ix, primep(start) as primep0, 0::HUGEINT as n,
|
|
[]::HUGEINT[] as display
|
|
union all
|
|
select if (primep0, ix+ix, ix+1) as ix,
|
|
if (primep0, primep(ix+ix), primep(ix+1)) as primep0,
|
|
if (primep0,1,0) + n as n,
|
|
if (primep0, [n+1, ix], []) as display
|
|
from cte
|
|
where n < mx
|
|
) select display
|
|
from cte
|
|
where display != []
|
|
limit mx
|
|
);
|
|
|
|
from task(42, 42);
|