RosettaCodeData/Task/Loops-Increment-loop-index-within-loop-body/DuckDB/loops-increment-loop-index-within-loop-body.duckdb
2025-08-11 18:05:26 -07:00

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);