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>usingnamespace std;intmain(){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 yokturwhile (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 inrange(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 yokturwhile (x !=int(math.sqrt(i))+1):if (i % x ==0):# “x”in “i”nin bir böleni olup olmadığının kontrol edilmesi j =1break# En az bir bölen bulunursa sayının asal olmadığını öğrenmek için yeterlidirelse: x +=1if (j ==0):# Asal sayıların ekrana yazdırılmasıprint(i)
☕ Java Kodu
publicclassAsal {publicstaticvoidmain(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 yokturwhile (x != (int)(Math.sqrt(i)) +1){ // “x”in “i”nin bir böleni olup olmadığının kontrol edilmesiif (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
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceAsal{classProgram{staticvoidMain(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 yokturwhile (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.