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
