PL SQL de asal sayıları bulmak için aşağıdaki kodu kullanabilirsiniz.

Kodu kabaca anlatmak gerekirse. 1’den 1000’e kadar olan tüm sayıları üretip with as ile all_numbers’ı oluşturdum.
ALL_NUMBERS’ı cartezyen (cross) join yaptım. Böylece her sayıyı, bölen başka bir sayı var mı diye kontroınl ettim.
1 sayısı her sayıya tam olarak bölündüğü için ve her sayı kendisine tam olarak bölündüğü için bunları küme dışında bıraktım.
2 sayının birbirine bölümü tam sayı ise ( roundlu hali ve roundsuz hali birbirine eşit ise) 0 dedim.

Hackerrank’de yazdığım kodu türkçe’de kaynak oluşturması için biraz değiştirip buraya ekledim.

WITH all_numbers AS 
(
   SELECT LEVEL AS nmbrs
     FROM dual
          CONNECT BY LEVEL <=1000
)
   SELECT a.nmbrs--, 
--          MIN(CASE WHEN ROUND(a.nmbrs/b.nmbrs)=(a.nmbrs/b.nmbrs) THEN 0 ELSE 1 END ) prime_flag
     FROM all_numbers a
          CROSS JOIN all_numbers b
    WHERE a.nmbrs<>b.nmbrs
          AND a.nmbrs<>1 
          AND b.nmbrs<>1
 GROUP BY a.nmbrs
   HAVING MIN(CASE WHEN ROUND(a.nmbrs/b.nmbrs)=(a.nmbrs/b.nmbrs) THEN 0 ELSE 1 END ) = 1
 ORDER BY 1
pl sql asal sayı

oracle asal sayıları bulan kod