Arkadaşlar merhaba, bu işte yeniyim. Kullanıcının girdiği sayıların asal olup olmadığını bool ile bulan metot ile çalışan bir program deneyeyim dedim. Fakat 0 ve 1'i almasın dedim. İf bloğunu yanlış yere yazdım sanırım. Yardımcı olursanız sevinirim. Ekranda true false gibi sonuçlar çıkıyor.
Ne kadar performanslı olur bilmem ama for döngüsü ile girilen sayının kendisine kadar olan tüm sayıları bölüp kalanı 0 olanları tek bir listte toplarsan ve 1'den ve kendinden başka eleman yoksa asal sayıdır yazdırabilirsen olabilir. Senin yaptığın yanlış zaten böleni yoksa asal sayıdır diye bir şey yok kendinden ve 1'den başka bir şeye bölünmeyen sayılara asal sayı denir.
Arkadaşlar merhaba, bu işte yeniyim. Kullanıcının girdiği sayıların asal olup olmadığını bool ile bulan metot ile çalışan bir program deneyeyim dedim. Fakat 0 ve 1'i almasın dedim. İf bloğunu yanlış yere yazdım sanırım. Yardımcı olursanız sevinirim. Ekranda true false gibi sonuçlar çıkıyor.
İlk seçeneğin: for döngüsünün girilen asal sayı kadar çalıştırman lazım. Sonrasında i sayısını asal sayıya bölüp 0 kalanı verdiyse (Mod operatörü ile yapabilirsin) asal sayı değil yazdırıp döngüden çıkmasını sağlayabilirsin
ikinci seçeneğin: aslında bu bir kısayoldur. Asal sayının asal sayı olup olmadığını anlamak için asal rakamlara bölmen gerekiyor. Asal rakamlara bölünmüyorsa asal sayıdır. Bunun algoritmasını da while veya for döngüsüyle oluşturman daha kolay olacaktır.
Ne kadar performanslı olur bilmem ama for döngüsü ile girilen sayının kendisine kadar olan tüm sayıları bölüp kalanı 0 olanları tek bir listte toplarsan ve 1'den ve kendinden başka eleman yoksa asal sayıdır yazdırabilirsen olabilir. Senin yaptığın yanlış zaten böleni yoksa asal sayıdır diye bir şey yok kendinden ve 1'den başka bir şeye bölünmeyen sayılara asal sayı denir.
Bu performans meselesinin sonu yok. Gerçekten ihtiyaç yoksa çok da kafaya takmamak lazım performansı.
Yine de asallığı performanslı olarak kontrol etmek istemiyorsanız çift sayıları pas geçebilirsiniz.
Asallığı daha çok performanslı kontrol etmek istemiyorsanız çift sayıları pas geçer ve kontrol yapacağınız sayının karekökü olan sayıya kadar kontrol yapabilirsiniz.
Eğer performans sizin için hayati öneme sahipse 6k ± 1 optimizasyonu kullanabilirsiniz.
bool IsPrime(int n)
{
if (n == 2 || n == 3)
return true;
if (n <= 1 || n % 2 == 0 || n % 3 == 0)
return false;
for (int i = 5; i * i <= n; i += 6)
{
if (n % i == 0 || n % (i + 2) == 0)
return false;
}
return true;
}
asalbul metodunda döngü zaten 1'den büyük ve a'dan küçük tam sayıları geziyor ve bolen değişkeninin değeri bu aralıktaki sayıların bölebilirliğine göre artırılıyor.
1'den ve kendisinden başka bir pozitif tam sayıya bölünememesi.
1'den büyük ve kendisinden küçük bir pozitif tam sayıya bölünememesi.
Bu ikisi aynı şey.
Algoritmada 1'den büyük tam sayılar için bir hata göremedim.
"Çok yanlış" bir yana, 2'den küçük sayılar için True döndürülmesi haricinde bir "yanlış" göremedim. Asallık kontrolü, en hızlısı böyle olmasa bile böyle yapılabilir. Neresinin yanlış olduğunu düşünüyorsanız detaylandırabilir misiniz?