c programlama asal sayı bulma / C++ Asal Sayı Bulma - Yusuf SEZER

C Programlama Asal Sayı Bulma

c programlama asal sayı bulma

C++ programlama dilinde bir sayının asal sayı olup olmadığının kontrolü ve asal sayıları bulma ile ilgili bilgiler yer alıyor.

Asal sayılar

Asal sayılar sadece kendisine ve 1 sayısına tam bölünen sayılardır.

Bir sayının asal sayı mı değil mi kontrolü 2 ila sayının kendisine kadar olan sayılara tam bölünüp bölünmediğinin kontrolü ile yapılır.

Örneğin 7 sayısı için 2 den 6 rakamına kadar tam bölünüp bölünmediği kontrol edilerek sayının asal olup olmadığı bulunabilir.

Sayının kendisine kadar tam bölünme kontrolü yerine sayının yarısına kadar olan sayıların kontrolü de aynı sonucu verecek ve döngü sayısını azaltacağından daha performanslı çalışacaktır.

Asal sayıların kontrolü için bir fonksiyon yazarak asal sayı bulma işlemi kolay bir şekilde yapılabilir.

Yazılan asal sayı kontrol fonksiyonu parametre olarak aldığı değeri while döngüsü ile kontrol ederek sonucu asal sayı/değil olarak geri döndürmektedir.

Asal sayı kontrol fonksiyonuna döngü yardımıyla belirli aralıktaki değerler gönderilerek asal sayı bulma işlemi yapılmış olur.

İşlem sonucunda asal sayılar için farklı asal olmayan sayılar için farklı işlemler yapılabilir.

Programlama örneklerine buradan ulaşabilirsiniz&#;

Hayırlı günler dilerim.

C Asal Sayı Bulma

  • Onbaşı
    38 Mesaj
    Konu Sahibi
    Yapmak istediğim şey asal sayıları funduszeue.info tek sayıları inceleyerek yapmak funduszeue.info kere kodlar ile oynarken bunu yaptım asal sayıları yazdırdı ama sıkıntı şurdaki ikinci for d&#;ng&#;s&#;n&#;n i&#;ine yazmıştım bu y&#;zden 97 defa 97 yazmıştı.D&#;ş&#;ncem mi yanlış,yani b&#;yle bir şey olmaz mı?Yoksa kodlarda mı bir sıkıntı var?Ayrıca aktif olarak T&#;rk&#;e yazılım forumu &#;nerir misiniz?
    Ayrıca break komutu tam olarak nedir?Yani mesela i&#; i&#;e for d&#;ng&#;s&#; yazdık,i&#;teki for d&#;ng&#;s&#;ne bir şart koyduk ve bu şart olursa break; yazdık.Şimdi iki for d&#;ng&#;s&#;nden de bir daha d&#;nmemek &#;zere mi &#;ıkıyor yoksa i&#;teki for d&#;ng&#;s&#;nden &#;ıkıp bir daha ikinci for d&#;ng&#;s&#;ne mi giriyor?
    Ayrıca for d&#;ng&#;s&#;n&#;n i&#;ine while(i%2!=0) yazdıfunduszeue.info başta if denedim sadece tek sayıları yazdırıyor ama while deyince program hi&#;bir şekilde &#;ıktı funduszeue.info://funduszeue.info



    < Bu mesaj bu kişi tarafından değiştirildi arkasokaklar -- 5 Aralık ; >







  • Yarbay
    Mesaj
    1-C++'da asal sayiları bulan programı şu şekilde yazdım. kendi isteğin &#;zerine modifiye edebilirsin.


    #include <iostream>

    using namespace std;

    int main()
    {

    int asalSayi;
    bool asal = true;
    for (asalSayi = 2; asalSayi < ; asalSayi++)
    {
    for (int i = 2; i < asalSayi; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;

    }
    system("pause");

    }

    2-Break komutu i&#;inde bulunduğu d&#;ng&#; par&#;asını kırar.

    Sorularını biraz daha d&#;zenli yazarsan insanlar daha iyi yardımcı olabilir. sorudan soruya atlaman işini zorlaştırır.
  • Çavuş
    96 Mesaj
    Cevap:funduszeue.info

    &#;ncelikle orada while d&#;ng&#;s&#;ne gerek yok. Bir diğer sorunun asal mı değil mi kontrol&#;n&#; yapmaman. Yazdığım kodlara bak ne demek istediğimi anlarsın.

    Yazılım forumu olarak en aktifi donanımhaber sanırım. Daha iyisi varsa mesaj yoluyla iletebilirsiniz.
  • Yarbay
    Mesaj
    ikinci for d&#;ng&#;s&#;nde i < asalSayi / 2 de yazabilirsin cunku yarısına kadar asal = false veriyorsa 2 katı da kesinlikle false verecektir bu da işlemi 2x hızlandırır; algoritmalarda hız &#;nemlidir.

    ilk for d&#;ng&#;s&#;nde ise asalSayi=1 'den başlamak matematik a&#;ısından daha doğru olur cunku 1 bir asal sayıdır :)
  • Yarbay
    Mesaj
    quote:

    Orijinalden alıntı: Tuğkan

    ikinci for d&#;ng&#;s&#;nde i < asalSayi / 2 de yazabilirsin cunku yarısına kadar asal = false veriyorsa 2 katı da kesinlikle false verecektir bu da işlemi 2x hızlandırır; algoritmalarda hız &#;nemlidir.

    ilk for d&#;ng&#;s&#;nde ise asalSayi=1 'den başlamak matematik a&#;ısından daha doğru olur cunku 1 bir asal sayıdır :)
    teşekk&#;rler siz b&#;yle dedikten sonra aklıma işlemi 2xden de fazla hızlandıracak bir fikir geldi. ilk 10 sayıyı kendinden k&#;&#;&#;k t&#;m sayılarla, 10 dan b&#;y&#;k sayılar i&#;inse sadece arası rakamlarla b&#;l&#;n&#;p b&#;l&#;nmediğini kontrol etmek programı &#;ok daha fazla hızlandıracaktır (ilk sayının i&#;indeki asalları bulmak i&#;in ge&#;erli). o y&#;zden kodumu şu şekilde d&#;zenledim. y&#;ksek oranda hız artışı olduğuna inanıyorum.

    bu arada hocam en k&#;&#;&#;k asal sayı 2'dir. 1 asal sayı değil bir yanlışlık oldu herhalde.


    #include <iostream>

    using namespace std;

    int main()
    {

    int asalSayi;
    bool asal = true;
    for (asalSayi = 2; asalSayi < ; asalSayi++)
    {
    if (asalSayi < 9) {
    for (int i = 2; i < asalSayi; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;
    }
    else {
    for (int i = 2; i < 10; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;
    }

    }
    system("pause");

    }





  • Yarbay
    Mesaj
    Evet 'e kada sayı i&#;in o da makul &#;&#;z&#;m. Bu arada benim iterasyonda 4 asal sayı olarak &#;ıkıyor, kodu deneyince fark ettim fakat sadece 4.
    if (asal == true && asalSayi != 4) yapınca d&#;zeliyor ama o zamanda kod uzamış oluyor.

    Evet 1 asal sayı değil; onu Fibonacci sayıları ile karıştırdım :)
  • Yarbay
    Mesaj
    quote:

    Orijinalden alıntı: Tuğkan

    Evet 'e kada sayı i&#;in o da makul &#;&#;z&#;m. Bu arada benim iterasyonda 4 asal sayı olarak &#;ıkıyor, kodu deneyince fark ettim fakat sadece 4.
    if (asal == true && asalSayi != 4) yapınca d&#;zeliyor ama o zamanda kod uzamış oluyor.

    Evet 1 asal sayı değil; onu Fibonacci sayıları ile karıştırdım :)
    Şu şekilde programa istenilen sayının k&#;k&#;n&#; sınır olarak verince daha g&#;zel oldu. &#;rnek olarak 'e kadar olan asalları istediğimizde arası sayılarla b&#;lmeye &#;alışması daha mantıklı. b&#;ylelikle istenilen her hangi bir sayı i&#;in asal sayı sıralanabilir.


    #include <iostream>
    #include <cmath>

    using namespace std;

    int main()
    {
    int asalSayiBoyut;
    cout << "Hangi sayiya kadar olan asal sayilar hesaplansin :";
    cin >> asalSayiBoyut;
    int asalSayiKok = sqrt(asalSayiBoyut);
    int asalSayi;
    bool asal = true;
    for (asalSayi = 2; asalSayi < asalSayiBoyut; asalSayi++)
    {
    if (asalSayi < asalSayiKok) {
    for (int i = 2; i < asalSayi; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;
    }
    else {
    for (int i = 2; i < asalSayiKok; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;
    }

    }
    system("pause");

    }




  • Onbaşı
    38 Mesaj
    Konu Sahibi
    Hocam bildiğiniz gibi en k&#;&#;&#;k asal sayı 2 dir ve 2 den başka &#;ift asal sayı funduszeue.info y&#;zden 2 den sonraki &#;ift sayıları incelemeye gerek yok bence bu y&#;zden while(i%2!=0) koydum yani i nin 4 6 8 gibi sayıları almasını istemiyorum doğru olur mu,yani algoritma doğru ve hızlı &#;alışır mı?
    Ayrıca şimdi aklıma geldi 3 ten itibaren 2 şer 2şer arttırılabiliniyormuş



    < Bu mesaj bu kişi tarafından değiştirildi arkasokaklar -- 6 Aralık ; >
    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yarbay
    Mesaj
    arkasokaklara kullanıcısına yanıt
    Hm o detayda bir yorum yapamam cunku algoritma sonu&#;ta biraz tasarım işi; yani istediğin şekilde, isteğin y&#;ntem ile tasarlayabilirsin. &#;rneğin BMW sıralı 6 silindir motor tasarladı, Porsche yatay 6 silindir ile Boxer motor tasarladı, ayrı tasarımlar ancak ikisi de iyi performans veriyor, onun gibi :

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Onbaşı
    38 Mesaj
  • Yüzbaşı
    Mesaj
    #include <stdio.h>
    #include <math.h>

    int checkPrimeNumber(int n);
    int checkArmstrongNumber(int n);

    int main()
    {
    int n, flag;

    printf("Enter a positive integer: ");
    scanf("%d", &n);

    // Check prime number
    flag = checkPrimeNumber(n);
    if (flag == 1)
    printf("%d is a prime number.
    ", n);
    else
    printf("%d is not a prime number.
    ", n);

    // Check Armstrong number
    flag = checkArmstrongNumber(n);
    if (flag == 1)
    printf("%d is an Armstrong number.", n);
    else
    printf("%d is not an Armstrong number.",n);
    return 0;
    }

    int checkPrimeNumber(int n)
    {
    int i, flag = 1;

    for(i=2; i<=n/2; ++i)
    {

    // condition for non-prime number
    if(n%i == 0)
    {
    flag = 0;
    break;
    }
    }
    return flag;
    }

    int checkArmstrongNumber(int number)
    {
    int originalNumber, remainder, result = 0, n = 0, flag;

    originalNumber = number;

    while (originalNumber != 0)
    {
    originalNumber /= 10;
    ++n;
    }

    originalNumber = number;

    while (originalNumber != 0)
    {
    remainder = originalNumber%10;
    result += pow(remainder, n);
    originalNumber /= 10;
    }

    // condition for Armstrong number
    if(result == number)
    flag = 1;
    else
    flag = 0;

    return flag;
    }

    bu kodda Armstrong ve Asal sayıları hesaplıyor.

    Bu koda bakıp kendi oluşturduğun kod ile karşılaştırabilirsin.
    Armstrong sayı nedir:funduszeue.info

    &#;ok &#;rnek var bu konu hakkında



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 8 Aralık ; >




  • Yüzbaşı
    Mesaj
    quote:

    Orijinalden alıntı: Guest-DA02D78F4

    Şu şekilde programa istenilen sayının k&#;k&#;n&#; sınır olarak verince daha g&#;zel oldu. &#;rnek olarak 'e kadar olan asalları istediğimizde arası sayılarla b&#;lmeye &#;alışması daha mantıklı. b&#;ylelikle istenilen her hangi bir sayı i&#;in asal sayı sıralanabilir.


    #include <iostream>
    #include <cmath>

    using namespace std;

    int main()
    {
    int asalSayiBoyut;
    cout << "Hangi sayiya kadar olan asal sayilar hesaplansin :";
    cin >> asalSayiBoyut;
    int asalSayiKok = sqrt(asalSayiBoyut);
    int asalSayi;
    bool asal = true;
    for (asalSayi = 2; asalSayi < asalSayiBoyut; asalSayi++)
    {
    if (asalSayi < asalSayiKok) {
    for (int i = 2; i < asalSayi; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;
    }
    else {
    for (int i = 2; i < asalSayiKok; i++)
    {
    if (asalSayi % i == 0)
    asal = false;
    }
    if (asal == true)
    cout << asalSayi << endl;
    asal = true;
    }

    }
    system("pause");

    }

    Alıntıları Göster
    Senin kodda bir hata var 10 sayısını girdiğimde doğru &#;alıştı 2'de hi&#; bir şey yok. 9 kadar rakamları sıralıyor. 10 sayısında doğru olarak &#;alıştı
    C Asal Sayı Bulma



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 8 Aralık ; >




  • Yarbay
    Mesaj
    berceb kullanıcısına yanıt
    Armstrong sayısını hesaplamak algoritma uygulaması a&#;ısından -bence- &#;nemli değil cunku sadece bir for veya while d&#;ng&#;s&#; ile halledilebilen birşey. Sayıyı basamaklara %10 kullanarak ayırmak ta yeni birşey değil.

    Alttaki soruda 2 'yi asal sayı olarak bulmaması da d&#;ng&#;n&#;n başlangı&#; değeriyle ilgili bir ayrıntı sadece.
  • Yüzbaşı
    Mesaj
    bakmadım başka &#;rneklerde vardır elbet. Zaten belli oranda birbirlerine benzerler bunlar.
  • Yarbay
    Mesaj
    quote:

    Orijinalden alıntı: Tuğkan

    ikinci for d&#;ng&#;s&#;nde i < asalSayi / 2 de yazabilirsin cunku yarısına kadar asal = false veriyorsa 2 katı da kesinlikle false verecektir bu da işlemi 2x hızlandırır; algoritmalarda hız &#;nemlidir.

    ilk for d&#;ng&#;s&#;nde ise asalSayi=1 'den başlamak matematik a&#;ısından daha doğru olur cunku 1 bir asal sayıdır :)
    Onden asalSayi % 2 == 0 mi diye bakip (ve 2 olmamasi lazim tabi ki) 0 ise dogrudan false dondurulebilir. Bunu yaptiktan sonra return etmediyse 3 ten asalSayi'ya kadar ikiser ikiser atlayarak gidilebilir. Boylece average costu O(n/4) olur tek sayilarin bulunmasi.



    Bu dedigim cok kucuk sayilarda nasil calisir bilmiyorum, duruma gore tane edge case'i ozel tanimlamak gerekebilir, ama zannetmiyorum.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yarbay
    Mesaj
    Bir yerde ş&#;yle bir şey okumuştum daha hızlıymış gibi ama tam fikrim yok





    Eleme yoluyla asalları buluyorsun



    2 3 4 5 6 7 35

    Gibi bir liste array dizin vb var



    Şimdi baştan başlıyorsun

    2 sağdaki 2nin katı olanları olmaz diye işaretliyorsun

    Sonra 3 e ge&#;tin 3 &#;n katlarını işaretliyorsun

    4 e gelmiyorsun &#;&#;nk&#; bu işaretliydi

    5 ge&#;tin 5inkatlaeını işaretliyorsun

    b&#;yle b&#;yle en b&#;y&#;ğ&#;n k&#;k&#;n&#;n olduğu yere kadar gidince oluşturduğun dizideki işaretsizler asal sayıların oluyor



    Hatırladığım kadarıyla bu daha verimli oluyormuş, ama emin değilim hesap kitap yapmadım



    Dynamic programming diye okumuştum galiba

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yarbay
    Mesaj
    quote:

    Orijinalden alıntı: berce

    Senin kodda bir hata var 10 sayısını girdiğimde doğru &#;alıştı 2'de hi&#; bir şey yok. 9 kadar rakamları sıralıyor. 10 sayısında doğru olarak &#;alıştı


    Alıntıları Göster
    haklısın hocam şimdi ben de kodumu inceledim de o istisnalara g&#;z atmamışım. 2 ye &#;zel bir istisna var tek &#;ift asal sayı olduğu i&#;in. benim kodumda denemeye 3 den başlıyor bu y&#;zden 2 girdiğinde 2yi es ge&#;iyor orada eşittir koysan bile 2mod2=0 vereceği i&#;in bu sefer asal değil kabul edecek bu sadece 2 ye ait bir istisna g&#;z&#;mden ka&#;mış yazarken.




  • Yüzbaşı
    Mesaj
    quote:

    Orijinalden alıntı: Guest-DA02D78F4

    haklısın hocam şimdi ben de kodumu inceledim de o istisnalara g&#;z atmamışım. 2 ye &#;zel bir istisna var tek &#;ift asal sayı olduğu i&#;in. benim kodumda denemeye 3 den başlıyor bu y&#;zden 2 girdiğinde 2yi es ge&#;iyor orada eşittir koysan bile 2mod2=0 vereceği i&#;in bu sefer asal değil kabul edecek bu sadece 2 ye ait bir istisna g&#;z&#;mden ka&#;mış yazarken.

    Alıntıları Göster
    for i&#;ersinde ki statement <= yaptığında 2 alıyor lakin sonraki kodlar bozuluyor. yeniden d&#;zenlemek gerekiyor.
    @Wepawet



    < Bu mesaj bu kişi tarafından değiştirildi berce -- 12 Aralık ; >




  • yeni mesaja gitYeni mesaj
    Bilgi ikonYeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme

Benzer içerikler

C Dilinde Asal Sayı Bulma

Merhabalar sizere bu yazımızda asal sayı bulan programı , C dilinde nasıl  yazıldığını sunuyorum, 
programalama dili öğrenirken algoritma zekamız gelişsin ve daha pratik olsun diye çeşitli algoritma soruları çözeriz bunların arasında girilen sayının asal olup olmadığını bulan program, asal sayı bulan program gibi algoritma soruları kod yazmayı öğrendiğimiz çoğu kaynak tarafından sorulur. Gelin hep beraber C dilinde asal sayı bulan programın kodlarını inceleyelim.

Asal sayı nedir ?

Asal sayı sadece 1 ve kendine bölünen sayılara denir, ve en küçük asal sayı 2'dir .
Negatif asal sayı yoktur, hepsi pozitif olmak zorunda, 0 asal değildir
Asal sayılar 2, 3, 5, 7, 11 şeklinde sonsuza kadar gider , şu ana kadar bayağı yüksek basamaklı asal sayılar bulunmuştur ama çok büyük basamaklı asal sayıları hesaplayacak bilgisayarların gücü daha fazla işlemi hızlı yapmaya yetmemektedir. Bunun nedeni for döngüsünün işleme konulan sayının asal olup olmadığını kontrol etmesi için 2'den başlayarak o sayıya kadar tüm sayıların işleme konulan sayıyı bölüp bölmediği kontrol edilir.

C dilinde asal sayı bulan programın kodları

C dilinde asal sayı bulan programın kodları aşağıdaki gibidir , burada dikkat etmeniz gereken husus for döngüsünün 2' den başlayıp girilen sayıya kadar dönmesi , burada for içerisinde mod alınarak her seferinde kalansız bölünüp bölünmediği kontrol ediliyor, eğer tam bölünürse döngüden "break" komutu ile çıkılıyor ve ekrana asal olmadığı yazıyor, eğer hiç bir şekilde break olmaz ise , ekrana asal sayı olduğu yazdırılıyor.

 

nest...

çamaşır makinesi ses çıkarması topuz modelleri kapalı huawei hoparlör cızırtı hususi otomobil fiat doblo kurbağalıdere parkı ecele sitem melih gokcek jelibon 9 sınıf 2 dönem 2 yazılı almanca 150 rakı fiyatı 2020 parkour 2d en iyi uçlu kalem markası hangisi doğduğun gün ayın görüntüsü hey ram vasundhara das istanbul anadolu 20 icra dairesi iletişim silifke anamur otobüs grinin 50 tonu türkçe altyazılı bir peri masalı 6. bölüm izle sarayönü imsakiye hamile birinin ruyada bebek emzirdigini gormek eşkiya dünyaya hükümdar olmaz 29 bölüm atv emirgan sahili bordo bereli vs sat akbulut inşaat pendik satılık daire atlas park avm mağazalar bursa erenler hava durumu galleria avm kuaför bandırma edirne arası kaç km prof dr ali akyüz kimdir venom zehirli öfke türkçe dublaj izle 2018 indir a101 cafex kahve beyazlatıcı rize 3 asliye hukuk mahkemesi münazara hakkında bilgi 120 milyon doz diyanet mahrem açıklaması honda cr v modifiye aksesuarları ören örtur evleri iyi akşamlar elle abiye ayakkabı ekmek paparası nasıl yapılır tekirdağ çerkezköy 3 zırhlı tugay dört elle sarılmak anlamı sarayhan çiftehan otel bolu ocakbaşı iletişim kumaş ne ile yapışır başak kar maydonoz destesiyem mp3 indir eklips 3 in 1 fırça seti prof cüneyt özek istanbul kütahya yol güzergahı aski memnu soundtrack selçuk psikoloji taban puanları senfonilerle ilahiler adana mut otobüs gülben ergen hürrem rüyada sakız görmek diyanet pupui petek dinçöz mat ruj tenvin harfleri istanbul kocaeli haritası kolay starbucks kurabiyesi 10 sınıf polinom test pdf arçelik tezgah üstü su arıtma cihazı fiyatları şafi mezhebi cuma namazı nasıl kılınır ruhsal bozukluk için dua pvc iç kapı fiyatları işcep kartsız para çekme vga scart çevirici duyarsızlık sözleri samsung whatsapp konuşarak yazma palio şanzıman arızası