Defalarca kez bir sayının asal olup olmadığını bulmuşuzdur. Fakat bunu en kısa haliyle oluşturmak istedim. Sanırım bundan kısası da olamaz.
[java] package methods;public class AsalSayi {
public static void main(String[] args) {
// TODO Auto-generated method stub
boolean durum = sayiAsalMi(99);
if(durum){
System.out.println("Asaldır");
}else{
System.out.println("Asal değildir");
}
}
private static boolean sayiAsalMi(int x) {
double kok = Math.sqrt(x);
for (int i = 2; i <= kok; i++) {//bir sayının köküne kadar bölümünü denersek o sayının asal olup olmadığını anlarız.
if(x%i == 0){// mod işlemi yapar. sayı tam bölündüğü an return false komutuna iner
return false;//sayı bölündüğü an asal değildir. Bu yüzden false değeri dönülmesi gerekmektedir.
}
}
return true;// false seçeneğine girmediği sürece son adım olarak true ya geldiğinde sayının asal olduğu anlaşılır.
}
}
[/java]
buraya en kısa diye başlık atmışsın ama yazdığın program oldukça yavaş, en basitinden metot içindeki for ‘u tek sayidan başlatıp ikişer ikişer attırmak bile (çünkü çift sayılar asal değildir) yazdığın metodun yaklaşık iki katı hızlanmasını sağlayabilir.
for u tek sayıdan başlatmaktan kastınız eğer 3 ise, tamam başlatalım. sayı 2 ye bölünürse ne olacak? bunun kontrolü sağlanmıyor. 2 den başlatmak zorunludur.