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