Bu yazımda Algoritmik problemlerde kullanılan ve bilim dünyasında da gayet ilginç olarak görülen mükemmel sayilardan bahsedecek ve verilen bir araliktaki tüm mükemmel sayilari bulan algoritmayı C++ koduyla beraber sunacam sizlere ama öncellikle Mükemmel sayi nedir ona bakalım.Mükemmel Sayi kendisine bölünen tüm bölünenlerinin toplamı kendisine eşit olan sayilara Mükemmel Sayilar denir.

Örneğin: 6 nın bölünenleri 1-2-3  tür.Bu bölünenleri topladığımızda kendisine eşit çıktığından bu sayi Mükemmel Sayidir.

Örneğin:28,28 in bölünenleri 1-2-4-7-14 olup 1+2+4+7+14=28 olduğundan bu sayida mükemmel sayidir.

Şimdi 100000 e kadar olan mükemmel sayilari gösteren exe’yi gösterdikten sonra C++ kodunu inceleyelim.

#include<iostream>
using namespace std;main()
{
      int sayi1,toplam=0;   
      cout<<“\t\tMEHMET SALIH DEVECI-18.07.2010\n”;
      cout<<“HANGI ARALIGA KADAR KI MUKEMMEL SAYILARI GORMEK ISTERSINIZ:”;
       cin>>sayi1;
       cout<<sayi1<<” e kadar ki mukemmel sayilar–> “;
     for(int j=4;j<sayi1;j++)
     {
      for(int i=1;i<=j-1;i++)
       { 
          if(j%i==0)
          toplam+=i;    
        }      
          if(toplam==j)
          cout<<j<<”  “;           
      toplam=0;
      }
      cout<<“\n\nBILGISAYAR MUHENDISI YAZILIM UZMANI\n\n”;
      system(“pause”);
      
      }
     

MEHMET SALİH DEVECİ

BİLGİSAYAR MÜHENDİSİ YAZILIM UZMANI

Reklamlar
yorum
  1. Hasan MANZAK dedi ki:

    for(int i=1;i 2, 3, 6, 9, 18, 27, 54, 81. Tutup da 82 ve sonrasını hesaba katmaya gerek yok. Benzer bir durum tek sayılar için de geçerli. Örnek: 165 = 3*5*11 => 3, 5, 11, 15, 33, 55. Gene aynı şekilde 56 ve sonrasını hesaba katmaya gerek yok. 165/2=82. Üst limiti bu şekilde ayarladığında gereksiz hesaplamaları elemiş olursun.

    Hatta, bak bunları yazarken aklıma daha iyi bir iyileştirme yöntemi geldi. Matematiksel olarak bir sayının en büyük böleni ( kendisi hariç ), sayının en küçük asal bölenine bölümü değil midir? 162/2=81, 165/3=55 … Dolayısıyla en küçük böleni yakaladıktan sonra, döngünün üst limitini hemen “Sayı / en küçük bölen” şeklinde ayarlayıp, gereksiz hesaplamaları elemiş olursun. Tabi bunun için for değil de while kullanman gerekir 😉

    Ayrıca bölenelr döngünü 1 den değil de 2 den başlatırsan gene bir eleminasyon yapmış olursun. 1’e bölmeye gerek yok çünkü 😉 Döngü sonunda toplama 1 eklersin, biter 😉

  2. YAZILIM UZMANI dedi ki:

    haklısınız zaten bir arkadaş istemişti bunu bende hemen o anda yazdım biraz hızlı oldu dediğiniz gibi iyi bir iyileştirme yapamadan yazmış oldum!! Vakit bulursam düzeltecem inşallah!!!

  3. cypkng dedi ki:

    Öncelikle paylaşımınız için teşekkür ederim. Fakat anlayamadığım bir yer var… #include kütüphanesine ihtiyaç duyan kısım hangisi ve ayrıca int mukemmel(int);
    kısmına niye ihtiyaç duyduk, Açıklayabilirseniz kodu anlamama faydası olacak. Birde
    for(int j=4;j<sayi1;j++) burda j neden 4 ten başladı niye bir değil. Aslında epey anlamadığım yer varmış. Zahmet olmaz ise açıklayabilirmisiniz.

  4. YAZILIM UZMANI dedi ki:

    include derken hangi include en üsttekine evet ihtiyaç yok ancak proje açarken otomatikmen geldiğinden bende silmedim..evet o fonksiyon prototipini önceden altta olan mukemmel fonksiyonu iiçin yazmıştım ancak sonrada fonksiyonu sildim kodları maine koydum onuda orda unutmuşum 4 ten başlamanasının nedeniyse en küçük mükemmel sayı 6 olmasındndır sende istersen 5 ten başlat sorun olmaz:)))

  5. cypking dedi ki:

    Açıklamaların için teşekürler, bende en üstteki include için söylemiştim çok sağolasın. Ayrıca elinde “*” lardan falan kare çizdirme yada içi bos ucgen falan var mı? Sitene ekleyebilirmisin?

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s