Project Euler - Soru 1: "3'ün ve 5'in Katları"

Project Euler - Soru 1: "3'ün ve 5'in Katları"

Project Euler Yazı Dizisi Hakkında

Bu yazı disinde projecteuler.net sitesindeki matematik ve yazılım karışımı soruların, programlamaya yeni başlayan şahsım tarafından yer yer acemice çözümlerini, algoritma tasarımlarını bulacak, benimle birlikte algoritma mantığınızı geliştirecek ya da pekiştireceksiniz. Kod yazımlarımda ben Python kodlama dilini kullanacağım ancak yer vereceğim algoritmalar ve açıklamalar her yazılım diline dökülebilirler. Eğer algoritma ve akış şeması ile alakalı bir fikriniz yoksa sizleri şu konuya alalım. Zira kullanacağım şekillerin ve şemaların bir açıklamasını orada yaptım.

Soru 1: “3’ün ve 5’in katları”

10’dan küçük 3’ün ya da 5’in katları olan sayıları sıralarsak, 3, 5, 6 ve 9 sayılarını elde ederiz. Bu katların toplamları 23 eder.

1000’den küçük 3’ün veya 5’in katları olan sayıların toplamını bulun.

Algoritma:

Bir sayının, bir sayının katı olup olmadığını birbirlerine böldürerek buluruz. Yani eğer büyük sayı, küçük sayıya kalansız bölünebiliyor ise, büyük sayı küçük sayının katlarıdır. O hâlde yapmamız gereken 1’den 1000’e kadar olan sayıları 3’e ve 5’e böldürmek. Soruda bize veya dediği için hem üçün hem de beşin katları olan sayılar özel bir durum teşkil etmiyor.

  1. 0’dan 1000’e kadar olan tüm sayıları önce üçe böldürelim.
  2. Eğer bölünüyorsa sayıyı toplama ekleyelim, bölünmüyorsa beşe böldürmeye çalışalım.
  3. Eğer bölünüyorsa sayıyı toplama ekleyelim, bölünmüyorsa denenecek sayıyı arttıralım.
  4. Zincirleme bir şart koşmamızın sebebi, aynı sayıyı iki defa toplama yazmamak.
  5. Sayı 1000’e ulaştığında işlemimizi sonlandırıp toplam değerini ekrana verdirelim.

O hâlde akış şemamız bu bilgiler eşliğinde şöyle olmalı:

Akış Şeması:

Koda Dökme (Python):

sum=0
for number in range(1, 1000, 1):
    if number%3==0:
        sum+=number
    elif number%5==0:
        sum+=number
print(sum)