😎Asal Sayılar

❓ Soru

10 ile 200 arasındaki tamsayılardan asal sayı olanları bulan algoritmayı yazınız.

⛓ Program Kısımları

  1. 10 ile 200 arasındaki sayıları kontrol ederek asal olanları bulmak.

  2. Asal olanları ekrana yazdırmak.

👓 Çözüm Yöntemi

  • Asal sayı: Yalnız bir ve kendisi ile bölünebilen birden büyük doğal sayıdır.

  • Bir i sayısı asal olup olmadığını tespit etmek için x=2den x=i-1e kadar artan bir sayaç oluştururuz. x sayının bir böleni olup olmadığını kontrol ederiz.

👩‍🔧 Çözüm Adımları

  1. i, x, “j”nin tanımlanması.

  2. 11’den 99’a kadar döngünün oluşturulması.

    • x ile jye başlangıç değerinin atanması

    • x ile kök(i) +1 eşit olmadığı sürece:

      • xin inin bir böleni olup olmadığının kontrol edilmesi.

    • Asal sayıların ekrana yazdırılması.

🤖 Kod

⚙ C++ Kodu

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int i, x, j; // “i”, “x”, “j”nin tanımlanması
    for (i = 11; i < 100; i++){ // 11’den 99’a kadar döngünün oluşturulması
        // “x” ile “j”ye başlangıç değerinin atanması   
        x = 2;
        j = 0; 
        // “x” ile (kök(i)+1) eşit olmadığı sürece:
        // “x” değeri hiçbir zaman (kök(i)+1) değeri ile “i”yi bölemez.
        // Bu yüzden bu değerin (kök(i)+1) üstünü kontrol etmeye gerek yoktur
        while (x != (int)(sqrt(i)) + 1){
            if (i % x == 0) { // “x”in “i”nin bir böleni olup olmadığının kontrol edilmesi   
                j = 1;
                break; // En az bir bölen bulunursa sayının asal olmadığını öğrenmek için yeterlidir 
            } else 
                x++;
    }
    if (j == 0)
        cout << i << " "; // Asal sayıların ekrana yazdırılması 
    }
 }

🐍 Python Kodu

import math
# 11’den 99’a kadar döngünün oluşturulması.
for i in range(11, 100):
    # “x”e yeni değerinin atanması
    x = 2
    j = 0
    # “x” ile (kök(i)+1) eşit olmadığı sürece:
    # “x” değeri hiçbir zaman (kök(i)+1) değeri ile “i”yi bölemez.
    # Bu yüzden bu değerin (kök(i)+1) üstünü kontrol etmeye gerek yoktur
    while (x != int(math.sqrt(i)) + 1):
        if (i % x == 0): # “x”in “i”nin bir böleni olup olmadığının kontrol edilmesi
            j = 1
            break # En az bir bölen bulunursa sayının asal olmadığını öğrenmek için yeterlidir
        else:
            x += 1
    if (j == 0):
        # Asal sayıların ekrana yazdırılması
        print(i)

☕ Java Kodu

public class Asal {
 public static void main(String arg[]) {
  int i, x, j; // “i”, “x”, “j”nin tanımlanması
  for (i = 11; i < 100; i++) { // 11’den 99’a kadar döngünün oluşturulması
   // “x” ile “j”ye başlangıç değerinin atanması   
   x = 2;
   j = 0; 
   // “x” ile (kök(i)+1) eşit olmadığı sürece:
   // “x” değeri hiçbir zaman (kök(i)+1) değeri ile “i”yi bölemez.
   // Bu yüzden bu değerin (kök(i)+1) üstünü kontrol etmeye gerek yoktur
   while (x != (int)(Math.sqrt(i)) + 1){  // “x”in “i”nin bir böleni olup olmadığının kontrol edilmesi
    if (i % x == 0) {
     j = 1;
     break; // En az bir bölen bulunursa sayının asal olmadığını öğrenmek için yeterlidir 
    } else x++;
   }
   if (j == 0)
    System.out.println(i); // Asal sayıların ekrana yazdırılması 
  }
 }
}

⏹ C# Kodu

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Asal{
    class Program{
        static void Main(string[] args){
            int i, x, j; // “i”, “x”, “j”nin tanımlanması
            for (i = 11; i < 100; i++){ // 11’den 99’a kadar döngünün oluşturulması
                // “x” ile “j”ye başlangıç değerinin atanması   
                x = 2; 
                j = 0;
                // “x” ile (kök(i)+1) eşit olmadığı sürece:
                // “x” değeri hiçbir zaman (kök(i)+1) değeri ile “i”yi bölemez.
                // Bu yüzden bu değerin (kök(i)+1) üstünü kontrol etmeye gerek yoktur
                while (x != (int)(Math.Sqrt(i)) + 1){
                    if (i % x == 0){
                        j = 1;
                        break; // En az bir bölen bulunursa sayının asal olmadığını öğrenmek için yeterlidir 
                    }
                    else x++; 
                }
                if (j == 0)
                    Console.WriteLine(i); // Asal sayıların ekrana yazdırılması
            }
            Console.ReadLine();
        }
    }
}

🧩 Akış Şeması

🎉 Ekran Çıktısı

11  13  17  19  23
29  31  37  41  43
47  53  59  61  67
71  73  79  83  89
97

💡 Notlar

  1. En az bir bölen bulunursa sayının asal olmadığını öğrenmek için yeterlidir. O yüzden sonraki değerleri kontrol etmeden döngüden çıkılır.

  2. x değeri hiçbir zaman (kök(i)+1) değeri ile iyi bölemez. Bu yüzden bu değerin (kök(i)+1) üstünü kontrol etmeye gerek yoktur. Örnek: i= 10 için kök(10)+1 değeri hiçbir zaman 10’u tam bölemez. Diğer sayıları da buna kıyas edebiliriz.

Last updated