bunu nasıl bir kodla yapabilirim?

"while" düşündüm, "for" düşündüm ama işin içinden çıkamadım.


 

while ya da for farketmez,
while ile yapacksanız bir sayaç koyun, o sayacın değerini her döngüde 1 arttırın ve sayıyı sayaca bölün, eğer bölüm her hangi bi değerde sıfır çıkarsa sayı asal değildir, çünkü kendinden ve birden başka bir sayıya bölünebilmektedir.

koşul da sayac<sayi olmalı.

eksi sozlukte eksiyen adam

yazdığın sayıya kadar olan sayıları o sayıya böler, kalanlı çıkmazsa ya da virgülsüz bir tam sayı elde edersen orda keser, asal olmadığı sonucu çıkar. yani 94232 yazdın, 1 den 94232 ye kadar bölme yapar gibi. ben zamanında böyle yazmıştım.

sehpa fx350

evet while ile aynen böyle yaptım ama mesela diyelim ki sayaca bölündü sayı, döngüyü nasıl durduracağız?

sayıyı girdikten sonra programın sayının asal olup olmadığını söylemesini istiyorum.

onlarca bu sayı asal değildir yazısı çıkıyor yaptığım döngüde.

king lizard

sehpa fx350'nin verdiği örnek üzerinden devam ediyorum, önce 94232'nin kökünü al ve 1 den köke kadar bölme yaptır, kökten sonrası tekrara girer, gereksiz iş yükü.

cevher67

köke kadar saydırmaya ek olarak çift sayıları otomatik atlayabilirsin. while kullanırken 2şer 2şer atlayarak. aslında 3'ün katlarını 5'in katlarını felan da otomatik bakılmadan atlayabilirsin ama kod iyice karmaşıklacaktır. çift sayıları ayıkla ama iyi hız sağlar.

döngüyü nasıl durduracağız diyorsun bide, bana kalırsa asal bakan method'un orada direkt olarak return değeri döndürebilir. Yani onu bir fonksiyon yada bir method olarak yapıp if (a%sayac == 0) return false yapman mantıklı. break tarzı şeyler de yapabilirsin ama tasvip etmem.

zamazengo

Fermat'ın asallık testi var. Bildiğim en hızlısı o.

alperz

şöyle bir şey yaptım:

public void run() {
println("This program checks if a number is prime or not.");
int n = readInt("n? ");
int i = 2;
int prime = 0;
if (n<2) {
println(n+" is not prime.");
} else {
while(i<n) {
if (n%i==0) prime = 1;
i += 1;
}
if (prime == 1) {
println(n+" is not prime.");
} else {
println(n+" is prime.");
}

}

}

sanırım çalışıyor. teşekkür ederim.

king lizard

www.mkyong.com

nuisance
1

mobil görünümden çık