10 ile 200 arasındaki tamsayılardan asal sayı olanları bulan algoritmayı yazınız.
⛓ Program Kısımları
10 ile 200 arasındaki sayıları kontrol ederek asal olanları bulmak.
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ı
i, x, “j”nin tanımlanması.
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();
}
}
}
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.
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.