Konuyu görüntüle
IUCODERS FORUM > Programlama > C / C++ > c yardım
Yazar
engineer58


avatar

Kayıt: 16.03.2006
27.07.2007-12:12 #25596
Aşağıdaki gönderilen bir sayının asal olup ulmadığını sınayan bir fonksiyon var. 2,3 ve 5 için programın daha hızlı çalışması sağlanmış fakat 7 den sonraki kontroller için yapılan k * k <= val sınaması kafamda ? bıraktı kodu anlayıp izah edecek olanlara şimdiden teşekkür ederim.


int isprime(int val)
{
int k;

if (val == 0 || val == 1)
return 0;

if (val % 2 == 0)
return val == 2;

if (val % 3 == 0)
return val == 3;

if (val % 5 == 0)
return val == 5;

for (k = 7; k * k <= val; k += 2)
if (val % k == 0)
return 0;

return 1;
}








Yazar
kellad


avatar
istanbul
Kayıt: 21.01.2006
27.07.2007-12:32 #25599
Bir sayı asal değilse kareköküne eşit yada küçük bir sayıya mutlaka bölünür. Burada k * k ile böleceği sayının karesini alıyor bu test edeceği sayıdan büyük çıkarsa kontrolü sonlandırıyor.

Kısaca kural şu: Bir sayı karekökünden küçük veya eşit olan hiç bir asal sayıya bölünmüyorsa asaldır. En küçük asal sayı 2'dir.







Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
Yazar
engineer58


avatar

Kayıt: 16.03.2006
27.07.2007-16:15 #25612
çok teşekkür ederim





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb