Birde olaya şyle yaklaşalım. Şimdi int ve longun belli bir tanım aralığı var değilmi.? int için int değerinin maximumunu alıp onun karekkünü buldursak ve bu karekkten nceki bütün asal sayıları tarayıp bir diziye atayıp o diziyle girilen sayının kontrolünü yapsak.? Bu dediğim çok uzun bir işlem ama bence performans açısından en optimize yol bu olur. Mesela bir class tanımlarsın bu yntemlerle elde ettiğin diziyi yani bir kütüphane gibi. daha sonra bir sayının asal olup olmadığını class a denetletirsin olay biter. ha bir classın çağrılması bir dngüyü dndermekten daha hızlı işleyen bir olaymıdır onuda bu konuda daha bilgili olanlar sylesin.

Dostlar Kod Bu : System. out. println ; Scanner girdi = new Scanner ;// Bu mühim değil girdi almak için int sayi = girdi. nextInt ; // Bu mühim değil girdi almak için sayi degiskenine klavyeden giriş int sayac = 2; if (sayi>=2) { while(sayi/2 >= sayac) { if(sayi%sayac 0) else if(sayi%sayac!=0 && sayi>sayac 2) if(sayi/2 sayac) } } else Daha Kısa bi formülü varmıdır. Zorla bunu çıkarabildim.

: Asal sayı için şuan en iyi yntem sayıyı karekke kadar blmektir. Mesela 100 sayısı asal olduğunu varsayalım. 100'ü tek tek 2, 3, 5, 7, 11... sayılarına blmektense 100'ün karekkü = 10'a kadar blmek daha kısa ve kolaydır. Karekküne kadar bir sayı blmüşse kendisini hayli hayli bler. hayır asal sayı tespiti için asal sayılara blünebilmeyi değil sayının 1den büyük tamsayılardan hiçbirine blünüp blünmediği kontrol edilir onun içinde sayının yarısına kadar olanları kontrol etmek yeter :) EDİT: int i=2, bolen=0, sayi;System. out. println ;Scanner girdi = new Scanner ;int sayi = girdi. nextInt ;if(sayi>=2){if(sayi%2 0 || sayi%3 0 || sayi%5 0 || sayi%7 0 || sayi%11 0 || sayi%13 0 || sayi%17 0 || sayi%19 0) else }else edit :D bu kod olmadı, blünebilme kurallarına bak vikipediden bu şekilde yap. olmamasının sebebi şu; mesela girilen sayı 7,7 asal sayı ama 7ye blünebildiği için asal sayı değil diyecek program, ama en kısa yolu bu şekilde, bunu hatırladım, derste yapmıştık. :)

boolean asalMi { for (int i = 2; i <= Math. sqrt ; i++) return true; } Sen hiç kaval çaldın mı?

: RDxMaster bunu yazdı: Birde olaya şyle yaklaşalım. Şimdi int ve longun belli bir tanım aralığı var değilmi.? int için int değerinin maximumunu alıp onun karekkünü buldursak ve bu karekkten nceki bütün asal sayıları tarayıp bir diziye atayıp o diziyle girilen sayının kontrolünü yapsak.? Bu dediğim çok uzun bir işlem ama bence performans açısından en optimize yol bu olur. Mesela bir class tanımlarsın bu yntemlerle elde ettiğin diziyi yani bir kütüphane gibi. daha sonra bir sayının asal olup olmadığını class a denetletirsin olay biter. ha bir classın çağrılması bir dngüyü dndermekten daha hızlı işleyen bir olaymıdır onuda bu konuda daha bilgili olanlar sylesin. oh maşallah :D sen dediğim gibi tek if bloguyla işi hallet gerisini s. et bence :D Üstad işin zevki bi problemin farklı çzümlerini bulabilmek :D dostlar farklı farklı çzmüşler saolsunlar. Madem fark var bende bi fark katayım dedim :D

int i=2, bolen=0, sayi;System. out. println ; Scanner girdi = new Scanner ; int sayi = girdi. nextInt ; if(sayi>=2) { while(i n/2) { if(sayi%i 0) i++; } if(bolen 0) else } else şu hale getirdim ama kısa oldumu olmadımı anlamadım :D bi dene istersenbide şu şekildede yapabilirsin. Kodlarda hata yaptım sanırım ama anlarsın demek istediğimi :) int i=2, bolen=0, sayi; System. out. println ; Scanner girdi = new Scanner ; int sayi = girdi. nextInt ; if(sayi>=2) { while(i n/2) { if(sayi%i 0) { bolen++; if(bolen!=0) } i++; } System. out. println ; } else if bloklarını && ile birleştirmeye çalış şu an kafam çok fena karıştı düzenleyemiyorum :)

edit : saçmaladım :D... valar morghulis...

: Birde olaya şyle yaklaşalım. Şimdi int ve longun belli bir tanım aralığı var değilmi.? int için int değerinin maximumunu alıp onun karekkünü buldursak ve bu karekkten nceki bütün asal sayıları tarayıp bir diziye atayıp o diziyle girilen sayının kontrolünü yapsak.? Bu dediğim çok uzun bir işlem ama bence performans açısından en optimize yol bu olur. Mesela bir class tanımlarsın bu yntemlerle elde ettiğin diziyi yani bir kütüphane gibi. daha sonra bir sayının asal olup olmadığını class a denetletirsin olay biter. ha bir classın çağrılması bir dngüyü dndermekten daha hızlı işleyen bir olaymıdır onuda bu konuda daha bilgili olanlar sylesin. oh maşallah :D sen dediğim gibi tek if bloguyla işi hallet gerisini s. et bence :D :)

valla ustam 1 saat yapmak için uğraştım 1 saatte düzeltmek için mal gibi hissettim kendimi :D senin sylediğini anladım şyle birşey var. kitapta buldum :D int sayi, sayac = 2 ; boolean test = true; System. out. println ; Scanner girdi = new Scanner ; sayi = girdi. nextInt ; while (test && sayac<= Math. sqrt { if(sayi%sayac 0) else if System. out. println ; else System. out. println ; } Sanırım Burada daha az kod var. :) Yardımın için çok teşekkür ederim. Değişken isimlerini farklı tanımlayıp farklı kullanmışsın sorun orda.

Asal sayı için şuan en iyi yntem sayıyı karekke kadar blmektir. Mesela 100 sayısı asal olduğunu varsayalım. 100'ü tek tek 2, 3, 5, 7, 11... sayılarına blmektense 100'ün karekkü = 10'a kadar blmek daha kısa ve kolaydır. Karekküne kadar bir sayı blmüşse kendisini hayli hayli bler. Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.

yav benim eski pc de bunun ile ilgili 2-3 farkli kod vardi, ama o makinaya ulasmam pek mumkun degil, TurboC ile yapmistim ben, bir elemaninda yazdigi programla karsilastirayim dedim, benim program 20 satirlik, adaminki 250 satirdan fazlaydi. benim program 2 den 10^3 e gelene kadar, adamin programi 10^6 yi geciyordu asiri derecede hizliydi. programin kodlarinda 2 den 2^16 (65536) ya kadar olan tum asal sayilar listelenmisti. o zamanlar nasi yaptigini anlayamamistim, simdiyse programi bulamiyorum. HolyOne'a ulasinca, bildirecegim...

http://en. wikipedia. org/wiki/Trial_division Bütün mesajlarım ve konularım BSD Lisansı"yla lisanslanmıştır.

: @wasd Dostum sayının karekküne kadar olan sayılara blmek daha hızlıdır. Ayrıca artırım miktarı 2 olmalıdır Mesela for i = 3 to sqr bolum = sayi / i response. write bolum i = i + 2 next tamam ufak sayılar için dediğin mantık doğru :) ama 1000001 asalmı değilmi denildiğinde sayı çiftlik kontrolünden geçer, karekkü 1000 olur ve 500civarı blme yaparsın 2şer arttırarak, benim dediğimde 5-10 blme işlemiyle biter. kod çok fazla kısaltılırsa performansta satır sayısıyla birlikte azalır. :)

@wasd Dostum sayının karekküne kadar olan sayılara blmek daha hızlıdır. Ayrıca artırım miktarı 2 olmalıdır Mesela for i = 3 to sqr bolum = sayi / i response. write bolum i = i + 2 next Matematikçi ve Yazılımcı. http://www.ontedi.com ve http://www.cizgi.site Siteme beklerim herkesi.