18 Ocak 2018 Perşembe

C - Mükkemmel Sayıları Bulan Program


Mükemmel Sayı: Kendisi hariç pozitif tam bölenlerinin toplamı kendisine eşit olan sayıdır. Bu sayıları kendimiz bulmaya çalışırsak eğer ilk bindeki mükemmel sayıları bulmak için her sayı için kontrol etmemiz gerekecektir. Buda çok fazla zaman alacaktır. Bilgisayarlar bu işlemleri bizden çok daha hızlı çözdüğü için ilk bindeki mükemmel sayıları mili saniyeler içinde bulacaktır. C dili de orta seviyeli bir dil olduğu için bu işlemi yüksek seviyeli dillere göre daha hızlı bir şekilde gerçekleştirecektir.

Programın optimizasyon yapılmamış hali ile 10000'e kadar verimli bir şekilde çalışmaktadır. Bu limitin üstündeki değerlerde hesaplama süresi uzamaktadır.

Program kodlarına github sitesinden de ulaşabilirsiniz.

Program Kodları

#include <stdio.h>
#include <math.h>

// Girilen değere kadar olan mükemmel sayıları ekrana yazdıran fonksiyon.
void perfectNumber(long int num) {
  // Mükemel sayıları saklamak için perfectNum dizisi kullanılıyor.
  // flag ile sayının bölenlerinin toplamının o sayıya eşit olup
  // olmadığını kontrol ediyoruz. counter, i ve j bir sayaçtır.
  int perfectNum[5], counter = 0;
  long int flag, i, j;

  // Bu for döngüsü ile num'a kadar olan mükemmel sayıları bulup
  // perfectNum dizisine kaydediyoruz.
  for (i = 1; i < num; i++) {
    flag = 0;
    for (j = 1; j < i; j++) {
      if (i%j == 0) {
        flag += j;
      }
    }
    // Bölenlerinin toplamı kendisine eşitse bu sayı mükemmeldir.
    if(flag == i) {
      perfectNum[counter] = i;
      counter++;
    }
  }

  // Bulunan mükemmel sayıları ve onların bölenlerini ekrana yazdırıyoruz.
  for (i = 0; i < counter; i++) {
    printf("%i = ", perfectNum[i]);
    for (j = 1; j < perfectNum[i]; j++) {
      if (perfectNum[i]%j == 0) {
        printf("%i ", j);
      }
    }
    printf("\n");
  }

}

int main(int argc, char const *argv[]) {

  // perfectNumber fonksiyonunu çağırıyoruz.
  perfectNumber(10000);

  return 0;
}

Ekran Çıktısı


Hiç yorum yok:

Yorum Gönder