BİLGİ SAYAMIYORUM beta

C++ ile iki sayı arasındaki asal sayıları nasıl gösterebilirim?

0

Asal sayılar kümesi, matematik dünyasının ki teknik olarak kendisi içinde bulunduğumuz dünyayı da kapsıyor, en garip ve etkileyici kısımlarından biridir. Matematik hayatın her noktasında fazlasıyla işe yarar ve uyumlu bir yapısı olduğu düşünülürse diğerlerinden farklı başka hiç bir sayıya bölünemeyen bu sayılar da neyin nesi diyebilirsiniz, bir çokları diyor. Bilgilerimizi RSA ile şifrelerkenden tutun da Contact filminde uzaylıların bize ulaşmak için kullandığı sinyallere kadar, asal sayılar ayrı bir önem taşıyor. İki sayı arasındaki asal sayıları bulmak çok gerekli olmayabilecek bir eylem olsa da bu çevrede yapılabilecek bir işlem olarak uygun görünüyor. Tabii ki buradaki asıl hedefimiz, bir sayının asal olup olmadığını nasıl kontrol edileceğini görmek. 

// İlk önce "main" fonksiyonu dahilinde kullanıcıdan 2 pozitif sayı istiyoruz, ikincisi ilkinden büyük olacak. Sonra o iki sayı arasında bir "for" loop u oluşturup, küçük sayıdan büyüğüne doğru her sayıyı asal mı değil mi diye kontrol ederek gidiyoruz. Her asal olanı bulduğumuzda 

     #include <iostream> // IO işlemleri kütüphanesi
     using namespace std; // Standart kütüphane

     int checkPrimeNumber(int); // Template olarak koyuyoruz, nasıl çalıştığını daha sonra belirleyeceğiz

     int main(){ // C++ da her zaman bir main olmalı
          int n1, n2; // Kullanıcıdan isteyeceğimiz sayılar
          bool isPrime; // Asal olunup olunmadığını taşıyacağımız değişken

          cout << "Lütfen iki pozitif sayı girin: ";
          cin >> n1 >> n2;
          cout <<  n1 << " ile " << n2 << " arasındaki asal sayılar: ";

          for(int i = n1+1; i < n2; ++i){ // "i" eğer asal ise onu yazdır
               isPrime = checkPrimeNumber(i);
               if(isPrime)
                    cout << i << " ";
          }
          return 0;
     }

// Aşağıda da bir sayının asal olup olmadığını kontrol eden fonksiyonu yazıyoruz. Bu işlemi de sayıyı, 2 den başlayıp o sayının yarısına kadar olan her sayıya bölerek yapıyoruz. Çünkü matematiksel olarak bire bölünmesini saymıyoruz ve bir tam sayıya bölündüğünde yarısından daha büyük bir sonuç çıkma ihtimali olmadığını biliyoruz. "isPrime" bu işlemin sonucunu attığımız evet/hayır içeren değişken. 

     int checkPrimeNumber(int n){
          bool isPrime = true;

          for(int j = 2; j <= n/2; ++j){
               if (n%j == 0){
                    isPrime = false;
                    break;
               }
          }
          return isPrime;
     }

Yorum kısımları "//" ile belirlenmiştir, koda etkileri yoktur. Kod kısmı tamamen alınıp kullanılabilinir. Online araçlar ile de test ettim ancak, sayının yarısına kadar bölme işlemi yapıldığı için ve her sayı için bu tekrarlandığından, büyük sayıyı eğer gerçekten büyük yazarsanız işlem süresi fazlasıyla uzar, aslında belli bir noktaya gelmeden sonlanma ihtimali daha yüksek.

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER