MÜKEMMEL SAYİLAR

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”);

}

 

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi
İhtiyacınız var [email protected] adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

About Mehmet Salih Deveci

I am Founder of SysDBASoft IT and IT Tutorial and Certified Expert about Oracle & SQL Server database, Goldengate, Exadata Machine, Oracle Database Appliance administrator with 10+years experience.I have OCA, OCP, OCE RAC Expert Certificates I have worked 100+ Banking, Insurance, Finance, Telco and etc. clients as a Consultant, Insource or Outsource.I have done 200+ Operations in this clients such as Exadata Installation & PoC & Migration & Upgrade, Oracle & SQL Server Database Upgrade, Oracle RAC Installation, SQL Server AlwaysOn Installation, Database Migration, Disaster Recovery, Backup Restore, Performance Tuning, Periodic Healthchecks.I have done 2000+ Table replication with Goldengate or SQL Server Replication tool for DWH Databases in many clients.If you need Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS Consultancy and Training you can send my email adress [email protected].-                                                                                                                                                                                                                                                 -Oracle DBA, SQL Server DBA, APPS DBA,  Exadata, Goldengate, EBS ve linux Danışmanlık ve Eğitim için  [email protected] a mail atabilirsiniz.

16 comments

  1. 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. 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. Ö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. 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. 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?

  6. Vampir sayıları bulma kodu alabilir miyiz?

Leave a Reply

Your email address will not be published. Required fields are marked *