İçeriğe geç
Educora
Orta8–9. sınıf25 dk32 / 59

Sayılar üzerinde işlemler: rakamlar, bölenler ve asal sayılar

Bir sayıyı `n % 10` ve `n // 10` ile rakamlarına ayırmak; rakamların toplamını, çarpımını, sayısını ve ters sayıyı bulmak; bölenleri saymak, asallığı ve tam kareyi kontrol etmek; EBOB'u Öklid algoritmasıyla hesaplamak. DİM soruları için hazır kalıplar.

Kendini test et
Bu derste öğreneceklerin
  • n % 10 ve n // 10 ile sayının rakamlarını ayırmak; rakamların toplamını, çarpımını, sayısını ve ters sayıyı bulmak
  • bölenleri saymak ve toplamak, bir sayının asal ya da tam kare olup olmadığını kontrol etmek
  • EBOB ve EKOK'u Öklid algoritmasıyla, 1 + 1/2 + … + 1/n gibi toplamları ise döngüyle hesaplamak
  • aralıktaki tüm sayıları iç içe döngülerle denemek ve DİM sorularındaki hazır kalıpları tanımak

Bir banka kartının numarası doğru girildi mi? Bunu kontrol eden algoritma numarayı rakam rakam ayırır, rakamları toplar ve bir kalana bakar. DİM'in her bilişim sınavında «Döngü deyimi. Sayılar üzerinde işlemler» konusundan 3–4 soru bulunur; 2025–2026'daki dört sınavın üçünde yazılı programlardan biri de bu konudandı. İyi haber şu: bu soruların neredeyse hepsi birkaç hazır kalıptan kurulur — rakam döngüsü, bölen döngüsü ve Öklid algoritması. Bu ders «Döngü deyimleri: for, while, adım, break, continue ve iç içe döngüler» dersinin devamıdır.

Rakamları ayırmak: n % 10 ve n // 10

Onluk sistemde bir sayının son rakamı, sayının 10'a bölümünden kalandır; 10'a tam bölme ise bu rakamı atar: 5682 % 10 = 2, 5682 // 10 = 568. Bu iki işlemi döngüde tekrarlarsak rakamları sağdan sola tek tek alırız; sayı 0 olunca rakamlar biter.

d = n % 10 n = n // 10
burada:
  • dson rakam (0…9)
  • %bölümden kalan
  • //tam bölme: kesirli kısım atılır, sayı bir basamak kısalır

Rakam döngüsünün iki temel komutu. Döngü while n > 0: koşuluyla çalışır.

n // pow(10, k) % 10 n % pow(10, k) n // pow(10, k)
burada:
  • n // pow(10, k) % 10sağdan k'nci rakam (k = 0 — birler, 1 — onlar, 2 — yüzler)
  • n % pow(10, k)son k rakamdan oluşan sayı
  • n // pow(10, k)son k rakam atıldıktan sonra kalan sayı

Herhangi bir rakam döngüsüz de alınabilir: 5682 // 100 % 10 = 6, 5682 % 100 = 82, 5682 // 1000 = 5.

Örnek 1. Rakamları almak

Hesaplayın: 1) 7049 % 10 ve 7049 // 10; 2) 7049 sayısının onlar ve yüzler basamağındaki rakam; 3) 30 % 10 ve 30 // 10.

Çözümü göster
1) 7049 = 704 · 10 + 9, yani 7049 % 10 = 9 ve 7049 // 10 = 704.
2) Onlar: 7049 // 10 % 10 = 704 % 10 = 4. Yüzler: 7049 // 100 % 10 = 70 % 10 = 0.
3) 30 % 10 = 0, 30 // 10 = 3. Son rakam 0 olabilir; rakam döngüsü onu da sayar.
  1. 1
    Kopyayı sakla

    Döngüde n değişip 0 olacak. Başlangıçtaki sayı sonra gerekecekse önce m = n yaz.

  2. 2
    Başlangıç değerleri

    toplam s = 0, çarpım p = 1, sayaç c = 0, ters sayı r = 0.

  3. 3
    Döngü koşulu

    while n > 0: — rakam kaldıkça.

  4. 4
    Rakamı al ve işle

    d = n % 10, sonra s = s + d, p = p * d, c = c + 1, r = r * 10 + d ya da if d % 2 == 0: gibi bir koşul.

  5. 5
    Rakamı at

    n = n // 10. Bu satır unutulursa döngü sonsuz olur.

Python
n = 5682
s = 0
p = 1
c = 0
r = 0
while n > 0:
    d = n % 10
    s = s + d
    p = p * d
    c = c + 1
    r = r * 10 + d
    n = n // 10
print(s, p, c, r)
▸ Beklenen çıktı
21 480 4 2865
Rakamların toplamı, çarpımı, sayısı ve ters sayı tek döngüde. Sınav programında ilk satır n = int(input()) olur; burada değeri değişkene yazdık ki program tarayıcıda çalışsın.
Python
x = 3704
k = 0
m = x
while x > 0:
    if x % 10 % 2 == 0:
        k = k + 1
    x = x // 10
print(m * 10 + k)
▸ Beklenen çıktı
37042
Örnek 2'nin programı. Önce sonucu kendin bul, sonra programı çalıştırıp kontrol et.
Örnek 2. DİM tarzı soru: programın çıktısı

Sınavda yukarıdaki program x = int(input()) ile başlar ve klavyeden 3704 girilir. Programın çıktısını belirleyin.
A) 37041 B) 3704 C) 37042 D) 24073 E) 37043

Çözümü göster
İz tablosu (x → son rakam, çift mi?, k):
3704 → 4, çift, k = 1
370 → 0, çift, k = 2
37 → 7, tek, k = 2
3 → 3, tek, k = 2
x = 0 — döngü biter. m başlangıçtaki sayıyı tutar: m · 10 + k = 37040 + 2 = 37042.
Cevap: C. Tuzak: 0 da çift rakamdır; onu unutan 37041'i seçer.

Ters sayı, palindromlar ve «tüm rakamlar tek»

Ters sayıyı kurmak için her adımda önceki sonucu 10 ile çarpıp yeni rakamı ekleriz: önceki rakamlar bir basamak sola kayar. Tersine eşit olan sayı palindromdur: 121, 4554, 7.

r = r * 10 + n % 10
burada:
  • rters sayı; başlangıçta r = 0
  • n % 10sıradaki son rakam

Ters sayı: 5682 için r = 2, 28, 286, 2865. Palindrom testi: döngüden sonra r == m (m, başlangıçtaki sayının kopyası).

a * pow(10, c) + n n * 10 + a
burada:
  • cn'nin basamak sayısı (rakam döngüsünün sayacı)
  • aeklenen rakam

a rakamını sayının başına ve sonuna yazmak.

Örnek 3. Sayıyı ters çevirmek ve rakam eklemek

1) 1230'un tersini bulun; 1230 palindrom mudur? 2) 4554 palindrom mudur? 3) 309 sayısının başına ve sonuna 7 rakamını yazın.

Çözümü göster
1) r: 0 → 3 → 32 → 321. Ters sayı 321'dir (0321 yazılmaz); 321 ≠ 1230, palindrom değildir.
2) r: 4 → 45 → 455 → 4554 = n, yani palindromdur.
3) 309'da c = 3 rakam var: 7 · 10³ + 309 = 7309; sona: 309 · 10 + 7 = 3097.

«Tüm rakamlar tek mi?» sorusu iki yolla cevaplanabilir: tek rakamları sayıp toplam rakam sayısıyla karşılaştırmak ya da bir bayrak değişkeni kullanmak: önce t = 1 («şimdilik hepsi tek»), çift bir rakam görülür görülmez t = 0. Aşağıdaki programda dış döngü sayıları, iç döngü ise rakamlarını dolaşır.

Python
for n in [357, 48, 1991, 7, 5031]:
    m = n
    t = 1
    while m > 0:
        if m % 10 % 2 == 0:
            t = 0
        m = m // 10
    if t == 1:
        print(n)
▸ Beklenen çıktı
357
1991
7
5031 yazdırılmaz: 0 çift rakamdır. Yazılı soruda sayılar tek tek int(input()) ile okunur.

Bölenler, asal sayılar ve tam kareler

Tanım
Bölen

n sayısı i'ye kalansız bölünüyorsa i, n'nin bölenidir: n % i == 0. 1'den büyük her doğal sayının en az iki böleni vardır: 1 ve kendisi.

Tanım
Asal sayı

Tam olarak iki pozitif böleni (1 ve kendisi) olan pozitif tam sayı: 2, 3, 5, 7, 11, 13, … İkiden fazla böleni olan sayı bileşik sayıdır; 1 ne asal ne de bileşiktir.

Tanım
Tam kare

Bir pozitif tam sayının karesi olan sayı: 1, 4, 9, 16, 25, 36, …

n % i == 0, i = 1, 2, …, n
burada:
  • idenenen aday bölen
  • c == 2bölen sayısı 2 ise n asaldır

Bölen döngüsü: for i in range(1, n + 1): ve içinde if n % i == 0:.

Python
n = 60
c = 0
s = 0
t = 0
for i in range(1, n + 1):
    if n % i == 0:
        print(i, end=' ')
        c = c + 1
        s = s + i
        if i % 2 == 1:
            t = t + i
print()
print(c, s, t)
▸ Beklenen çıktı
1 2 3 4 5 6 10 12 15 20 30 60 
12 168 24
60'ın bölenleri, sayıları (12), toplamları (168) ve tek bölenlerin toplamı (1 + 3 + 5 + 15 = 24). end=' ' bölenleri tek satırda yazdırır.
pow(a, 0.5) == int(pow(a, 0.5))
burada:
  • pow(a, 0.5)a'nın karekökü, ondalıklı sayı (49 ** 0.5 → 7.0)
  • int(…)kesirli kısmı atar

Kök tam sayıysa a tam karedir. DİM çözümlerinde a ** (1/2) yazımı da geçer; ikisi aynıdır.

Örnek 4. Bölenler, asallık, kareler

1) 36'nın kaç böleni vardır? 2) 97 asal mıdır? 3) 28'in kendisi hariç bölenlerinin toplamını bulun. 4) [30, 50] aralığında kaç tam kare vardır?

Çözümü göster
1) 1, 2, 3, 4, 6, 9, 12, 18, 36 — 9 bölen. Sayı tektir, çünkü bölenler çift çift gelir (1 · 36, 2 · 18, 3 · 12, 4 · 9), 6 ise kendisiyle eşleşir: 6 · 6 = 36.
2) 2'den 9'a kadar denemek yeterlidir (10 · 10 = 100 > 97). Bunlardan hiçbiri 97'yi bölmez; yani 97'nin yalnızca iki böleni vardır, asaldır.
3) 1 + 2 + 4 + 7 + 14 = 28 — toplam sayının kendisine eşittir (böyle sayılara mükemmel sayı denir).
4) 36 ve 49: 36 ** 0.5 → 6.0, 49 ** 0.5 → 7.0. Cevap: 2.

İç içe döngüler: aralıktaki tüm sayıları denemek

Soru tek bir sayı için değil de [a, b] aralığındaki her sayı için soruluyorsa bölen (veya rakam) döngüsü başka bir döngünün içine konur: dış döngü sayıları, iç döngü bölenleri dolaşır. Sayaç (c = 0) her yeni sayı için sıfırlanmalıdır; bu yüzden dış döngünün içine yazılır.

Python
a = 20
b = 40
k = 0
for n in range(a, b + 1):
    c = 0
    for i in range(1, n + 1):
        if n % i == 0:
            c = c + 1
    if c == 2:
        print(n, end=' ')
        k = k + 1
print()
print('count =', k)
▸ Beklenen çıktı
23 29 31 37 
count = 4
[20, 40] aralığındaki asal sayılar. c = 0 satırını dış döngünün önüne taşı ve neyin değiştiğine bak.
Örnek 5. İç döngü kaç kez çalışır?

Yukarıdaki programda if n % i == 0 kontrolü toplam kaç kez çalışır?

Çözümü göster
Her n için iç döngü i = 1, 2, …, n değerlerini alır, yani n kez çalışır. Toplam: 20 + 21 + … + 40; bu, 21 terimli bir aritmetik dizidir: (20 + 40) · 21 / 2 = 630.
Cevap: 630. √n kuralıyla deneme sayısı çok azalırdı.

EBOB, EKOK ve toplamlar

İki sayının en büyük ortak bölenini (EBOB) tüm bölenleri denemeden Öklid algoritmasıyla bulabiliriz. Algoritma şu gerçeğe dayanır: a'nın b'ye bölümünden kalan da EBOB(a, b)'ye bölünür. Yani (a, b) çifti (b, a % b) çiftiyle değiştirilebilir ve sayılar hızla küçülür.

EBOB(a, b) = EBOB(b, a % b), EBOB(a, 0) = a
burada:
  • a % ba'nın b'ye bölümünden kalan
  • b = 0kalan 0 olunca dururuz: cevap a'dır

Öklid algoritması. Ders kitaplarında çıkarma yöntemi de vardır: sayılar eşitlenene kadar büyükten küçüğü çıkar.

EKOK(a, b) = a · b / EBOB(a, b)EKOK(a, b) = a · b / EBOB(a, b)
burada:
  • a · biki sayının çarpımı

En küçük ortak kat EBOB'dan hemen bulunur.

Python
a = 84
b = 36
p = a * b
while b != 0:
    r = a % b
    a = b
    b = r
print(a, p // a)
▸ Beklenen çıktı
12 252
(84, 36) → (36, 12) → (12, 0): EBOB = 12, EKOK = 3024 / 12 = 252. Çıkarma yöntemiyle: (84, 36) → (48, 36) → (12, 36) → (12, 24) → (12, 12).
Örnek 6. EBOB ve EKOK

Öklid algoritmasıyla EBOB(126, 84) ve EKOK(126, 84)'ü bulun. Döngü kaç kez çalışır?

Çözümü göster
(126, 84): 126 % 84 = 42 → (84, 42)
(84, 42): 84 % 42 = 0 → (42, 0) — dur.
EBOB = 42, döngü 2 kez çalıştı. EKOK = 126 · 84 / 42 = 10584 / 42 = 252.

Dizilerin toplamı ve çarpımı da aynı şemayla hesaplanır: bir toplayıcı (s = 0) veya çarpıcı (p = 1) değişken ve döngünün her adımında bir terim. Kesirlerde / kullanılır, sonuç ondalıklı sayı olur.

S = 1 + 1/2 + 1/3 + … + 1/n n! = 1 · 2 · 3 · … · nS = 1 + 1/2 + 1/3 + … + 1/n n! = 1 · 2 · 3 · … · n
burada:
  • s = s + 1 / is = s + 1 / itoplamın döngüdeki kalıbı
  • p = p * ifaktöriyelin kalıbı (başlangıçta p = 1)

i döngü değişkenidir: for i in range(1, n + 1):.

Python
n = 4
s = 0
p = 1
for i in range(1, n + 1):
    s = s + 1 / i
    p = p * i
print(round(s, 4), p)
▸ Beklenen çıktı
2.0833 24
1 + 1/2 + 1/3 + 1/4 = 25/12 ≈ 2,0833 ve 4! = 24. round(s, 4) sonucu virgülden sonra 4 basamağa yuvarlar.
Örnek 7. İşareti değişen toplam

S = 1 − 1/2 + 1/3 − 1/4 toplamını hesaplayan bir döngü kurun ve S'yi bulun.

Çözümü göster
İşaret için bir z değişkeni alırız: önce z = 1, her adımda s = s + z / i ve z = -z.
i = 1: s = 1
i = 2: s = 1 − 1/2 = 1/2
i = 3: s = 1/2 + 1/3 = 5/6
i = 4: s = 5/6 − 1/4 = 7/12 ≈ 0,5833.
Aynı fikir akış şemasında «Akış şeması oluşturma: yazılı sorular» dersinde kullanılır.
GörevKalıp
rakamların toplamıs = s + n % 10, n = n // 10
basamak sayısıc = c + 1; len(str(n))
ters sayı, palindromr = r * 10 + n % 10; r == m
bölen sayısıif n % i == 0: c = c + 1
asal sayıc == 2
tam karea ** 0.5 == int(a ** 0.5)
EBOBr = a % b, a = b, b = r
1 + 1/2 + … + 1/n toplamıs = s + 1 / i
Hazır kalıplar. Bunlardan tam program kurmak «Program yazmak: yazılı görevlerin çözümü» dersinde gösterilir.
Kendini dene: boşluğu doldur
  1. 1.Sayının son rakamı: d = n 10
  2. 2.Ters sayı: r = r * + n % 10
  3. 3.Bir asal sayının tam olarak böleni vardır.
  4. 4.EBOB(48, 18) =
  5. 5.1'den 100'e kadar tam karelerin sayısı:
Alıştırma

while döngüsüyle n = 90517 sayısının rakamları toplamını ve ters sayıyı bulun ve bunları bir satırda, boşlukla ayırarak yazdırın.

Alıştırma · Python
n = 90517
s = 0
r = 0
# digit loop here

print(s, r)
▸ Beklenen çıktı
22 71509
Alıştırma

1'den 100'e kadar (dahil) tam olarak 3 böleni olan sayıları her biri ayrı satırda olacak şekilde yazdırın. Sonra onlara bakın: bu sayıların ortak özelliği nedir?

Alıştırma · Python
for n in range(1, 101):
    c = 0
    # count the divisors of n here

    if c == 3:
        print(n)
▸ Beklenen çıktı
4
9
25
49

Önemli noktalar

  • n % 10 son rakamı verir, n // 10 onu atar; rakam döngüsü while n > 0: koşuluyla çalışır.
  • Toplam 0'dan, çarpım 1'den başlar; ters sayı r = r * 10 + d ile kurulur, palindrom tersine eşittir.
  • i, n'nin bölenidir ⇔ n % i == 0; asal sayının tam 2 böleni vardır, asallık testi için i * i <= n olana kadar denemek yeterlidir.
  • Tam kare: a ** 0.5 == int(a ** 0.5); EBOB — Öklid algoritması, EKOK = a · b / EBOB.
  • Aralıktaki her sayı için dış döngü sayıları, iç döngü bölenleri veya rakamları dolaşır; sayaç dış döngünün içinde sıfırlanır.

Kendini test et

12 soru. Her doğru cevap XP kazandırır.

1 / 12
Hangi ifade n sayısının son rakamını verir?