C# Asal sayı kontrol eden program nasıl yazılır?

KingOfS

Hectopat
Katılım
3 Ağustos 2020
Mesajlar
90
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.
 

Dosya Ekleri

  • asal 2.png
    asal 2.png
    10,5 KB · Görüntüleme: 140
  • asal sayı 1.png
    asal sayı 1.png
    49,4 KB · Görüntüleme: 196
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.
Yapman gereken algoritma şöyle:

İ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.
6k ± 1 optimizasyonu:
C#:
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;
}
 
Son düzenleyen: Moderatör:
Kodu kod bloğu olarak atmadiginiz için koda değişiklik yapamam.

Kodunuz gerçekten çok yanlış. Asal kontrolü öyle yapılmaz.
 
Senin yaptığın yanlış zaten, böleni yoksa asal sayıdır diye bir şey yok. Kendisinden ve 1'den başka bir şeye bölünmeyen sayılara asal sayı denir.

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.

Kodunuz gerçekten çok yanlış. Asallık kontrolü öyle yapılmaz.

"Ç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?
 

Technopat Haberler

Yeni konular

Geri
Yukarı