2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97....
You have to know: Doesn't exist any formula for prime numbers.
But DB2 is so powerful that allow us to find the prime numbers in one statement.
Just change LIM in the following SQL and you'll get all prime numbers between 2 and LIM.
To find prime numbers we'll use the theorem:
If for number N not exists divisor 1 < k <= Sqrt(N) then N is the prime.
Base on this theorem we'll create the DB2 query:
with limit (lim) as (select int(100000) from sysibm.sysdummy1 ) , numbers (num) as (select 2 from sysibm.sysdummy1 union all select num + 1 from numbers, limit where num + 1 <= int(sqrt(lim)) + 1 ) , prime_check (prime_num, prime_ind) as (select int(2), varchar('P', 1) from sysibm.sysdummy1 union all select 3, 'P' from sysibm.sysdummy1 union all select prime_num + 2, case when int(substr(digits(prime_num + 2), 10, 1)) = 5 and prime_num + 2 > 5 then 'R' when mod( int(substr(digits(prime_num + 2 ), 1, 1)) + int(substr(digits(prime_num + 2 ), 2, 1)) + int(substr(digits(prime_num + 2 ), 3, 1)) + int(substr(digits(prime_num + 2 ), 4, 1)) + int(substr(digits(prime_num + 2 ), 5, 1)) + int(substr(digits(prime_num + 2 ), 6, 1)) + int(substr(digits(prime_num + 2 ), 7, 1)) + int(substr(digits(prime_num + 2 ), 8, 1)) + int(substr(digits(prime_num + 2 ), 9, 1)) + int(substr(digits(prime_num + 2 ), 10, 1)), 3) = 0 and prime_num + 2 > 3 then 'R' when mod( int(substr(digits(prime_num + 2 ), 1, 1)) - int(substr(digits(prime_num + 2 ), 2, 1)) + int(substr(digits(prime_num + 2 ), 3, 1)) - int(substr(digits(prime_num + 2 ), 4, 1)) + int(substr(digits(prime_num + 2 ), 5, 1)) - int(substr(digits(prime_num + 2 ), 6, 1)) + int(substr(digits(prime_num + 2 ), 7, 1)) - int(substr(digits(prime_num + 2 ), 8, 1)) + int(substr(digits(prime_num + 2 ), 9, 1)) - int(substr(digits(prime_num + 2 ), 10, 1)), 11) = 0 and prime_num + 2 > 11 then 'R' when 1 = (select 1 from sysibm.sysdummy1 where exists (select 1 from numbers where num not in (3, 5, 11) and num <= int(sqrt(prime_num + 2)) + 1 and mod(prime_num + 2, num) = 0 ) ) then 'R' else 'P' end from prime_check, limit where prime_num + 2 <= int(sqrt(lim)) + 1 ) , prime_num_1 (prime_num) as (select prime_num from prime_check where prime_ind = 'P' ) , prime_num_2(prime_num, prime_ind) as (select max(prime_num), varchar('X', 1) from prime_num_1 union all select p2.prime_num + 2, case when int(substr(digits(p2.prime_num + 2), 10, 1)) = 5 then 'R' when mod( int(substr(digits(p2.prime_num + 2 ), 1, 1)) + int(substr(digits(p2.prime_num + 2 ), 2, 1)) + int(substr(digits(p2.prime_num + 2 ), 3, 1)) + int(substr(digits(p2.prime_num + 2 ), 4, 1)) + int(substr(digits(p2.prime_num + 2 ), 5, 1)) + int(substr(digits(p2.prime_num + 2 ), 6, 1)) + int(substr(digits(p2.prime_num + 2 ), 7, 1)) + int(substr(digits(p2.prime_num + 2 ), 8, 1)) + int(substr(digits(p2.prime_num + 2 ), 9, 1)) + int(substr(digits(p2.prime_num + 2 ), 10, 1)), 3) = 0 then 'R' when mod( 6 * int(substr(digits(p2.prime_num + 2 ), 1, 1)) + 2 * int(substr(digits(p2.prime_num + 2 ), 2, 1)) + 3 * int(substr(digits(p2.prime_num + 2 ), 3, 1)) + 1 * int(substr(digits(p2.prime_num + 2 ), 4, 1)) + 5 * int(substr(digits(p2.prime_num + 2 ), 5, 1)) + 4 * int(substr(digits(p2.prime_num + 2 ), 6, 1)) + 6 * int(substr(digits(p2.prime_num + 2 ), 7, 1)) + 2 * int(substr(digits(p2.prime_num + 2 ), 8, 1)) + 3 * int(substr(digits(p2.prime_num + 2 ), 9, 1)) + 1 * int(substr(digits(p2.prime_num + 2 ), 10, 1)), 7) = 0 then 'R' when mod( int(substr(digits(p2.prime_num + 2 ), 1, 1)) - int(substr(digits(p2.prime_num + 2 ), 2, 1)) + int(substr(digits(p2.prime_num + 2 ), 3, 1)) - int(substr(digits(p2.prime_num + 2 ), 4, 1)) + int(substr(digits(p2.prime_num + 2 ), 5, 1)) - int(substr(digits(p2.prime_num + 2 ), 6, 1)) + int(substr(digits(p2.prime_num + 2 ), 7, 1)) - int(substr(digits(p2.prime_num + 2 ), 8, 1)) + int(substr(digits(p2.prime_num + 2 ), 9, 1)) - int(substr(digits(p2.prime_num + 2 ), 10, 1)), 11) = 0 then 'R' when 1 = (select 1 from sysibm.sysdummy1 where exists (select 1 from prime_num_1 p1 where p1.prime_num not in (3, 5, 7, 11) and p1.prime_num <= int(sqrt(p2.prime_num)) + 1 and mod(p2.prime_num + 2, p1.prime_num) = 0 ) ) then 'R' else 'P' end from prime_num_2 p2, limit lm where p2.prime_num + 2 <= lim ) , prime_number (prime_num) as (select * from prime_num_1 union all select prime_num from prime_num_2 where prime_ind = 'P' ) select prime_num "Prime Number" from prime_number
You can COPY/PASTE SQL and run.
All prime numbers found in range between 2 and lim.
limit (lim) as (select int(1000000) from sysibm.sysdummy1 )
Lenny