Java'da asal sayı belirlemede, 2'den n-1'e kadar bölünebilirlik kontrol eden geleneksel yöntemin verimliliğini artırarak sqrt(n)'e kadar kontrol etme ve 6k±1 biçimini kullanma yöntemini sunar.
Stream kullanarak tembel değerlendirme uygulandığında, yalnızca gerekli elemanlar üretildiğinde işlem gerçekleştirilerek asal sayıları bulan bir Stream oluşturulabilir.
Sunulan iyileştirmeler ve Stream kullanım yöntemi ile asal sayı belirleme algoritması daha verimli bir şekilde uygulanabilir.
Genellikle n'nin asal sayı olup olmadığını kontrol etmek için 2'den n - 1'e kadar n'yi bölerek, bölünebilir olup olmadığını kontrol ederiz.
Bu yöntemde, bazı iyileştirmeler uygulayarak daha verimli hale getirebilir ve Stream kullanarak tembel değerlendirme (lazy evaluation) uygulayabiliriz.
Basit (Naive) Yöntem
Aşağıda n'nin asal sayı olup olmadığını kontrol eden basit bir yöntem verilmiştir.
İyileştirmeler
n = a x b olarak ifade edilirse, a > b varsayımı genelliği bozmaz. Yani, i, sqrt(n)'ye kadar kontrol edilmelidir. sqrt() işlemi maliyetli olduğundan, i * i <= n koşulu ile değiştirilebilir.
5'ten büyük asal sayılar 6k ± 1 biçimindedir. Bu nedenle, i, 6'şar artırılarak kontrol edilirse, kontrol sayısı azaltılabilir.
Geliştirilmiş Yöntem
Stream ile Tembel Değerlendirme Uygulamak
Java'daki Stream, List'ten farklı olarak, bir işlem tanımlandığında hemen çalıştırılmaz.
Her bir elemanın nasıl hesaplanacağını tanımlayan bir durumda bekler ve belirli bir elemana ihtiyaç duyulduğunda, yalnızca o elemanı bulmak için gereken işlemi gerçekleştirir.
Bunu kullanarak, aşağıdaki gibi asal sayıları bulan bir Stream oluşturabiliriz.