Basit bir çarpma yöntemi

2018-03-04 3 dk

Nedir?

10-19 aralığındaki tam sayıların kendileri arasında çarpımında kullanılabilecek, klasik çarpmadan yaklaşık 3 kat daha kolay bir çarpma yöntemi. Ek olarak 10 ve katlarının çarpımlarında da kullanılabilir.

Konu matematik olunca, özellikle de benim gibi matematikle yıldızı sonradan barışan biriyseniz, böyle bir yöntem bulduğunuz için sevinip, blog yazısı yazabiliyorsunuz 😌. Benzerleri zaten varmış, ancak bu biraz daha pratik. Belki işinize yarar.

Nasıl?

Hepsi bu kadar. Renkler sayesinde basamakları ayırt edebilirsiniz. İşlem adımlarında elde kalan olsaydı, örneğin ilk adımın sonucu 24 olsaydı, 24 sayısının 4'ünü sonuç sayısının birler basamağına yazacak ve 2'sini ise elde var olarak tutup sonraki adımın sonucuna toplama olarak ekleyecektik.

Başarı Oranı

10-19 arası tam sayıların kendileri arasında çarpımında kullanılabilir. Ek olarak, 10'un katları için de (örn. 20x30) doğru sonuç verir. Bu haliyle de sanırım sınavlar için iş görür.

Python Kodları

Başarı oranını test eden basit bir Python betiği aşağıda yer alıyor.

math-trick.py
# sayinin n. basamagini dondurur.
# sayima sagdan baslar, baslangic sifirdir
def get_digit(number, n):
    return number // 10**n % 10


# elde var sistemini simule eder.
# sagdaki sayinin onlar basamagini soldakine ekler,
# sagdaki sayiyi da kendisinin birler basamagina esitler
def rex(left, right):
    left, right = int(left), int(right)
    left += get_digit(right, 1)
    right = get_digit(right, 0)

    return left, right


# hesaplayici
# once iki sayinin birler basamagini carpar
# sonra iki sayinin birler basamagini toplar
# sonra iki sayinin onlar basamagini carpar
def calculate(i, y):
    ones = get_digit(i, 0) * get_digit(y, 0)
    tens = get_digit(i, 0) + get_digit(y, 0)
    hundreds = get_digit(i, 1) * get_digit(y, 1)

    if len(str(ones)) > 1:
        tens, ones = rex(tens, ones)

    if len(str(tens)) > 1:
        hundreds, tens = rex(hundreds, tens)

    ones, tens, hundreds = str(ones), str(tens), str(hundreds)
    result = hundreds + tens + ones

    return int(result)


# dogrular, yanlislar
correct, incorrect = list(), list()


# iki haneli tum sayilari, iki haneli tum sayilarla
# carptigimiz ana kisim burasidir
for i in range(10, 100):
    for y in range(i, 100):
        calculation = calculate(i, y)
        result = i * y

        # formulle bulunan sayi, asil sonuc ile ayni ise
        if calculation == result:
            # dogrular listesine ekle
            correct.append(("{} x {} = {}".format(i, y, calculation)))
        else:  # degilse
            # yanlislar listesine ekle
            incorrect.append(("{} x {} = {} ({})".format(
                            i, y, calculation, result)))

# dogrulari ekrana bastir
for i in correct:
    print(i)

print('=' * 15)

# iki basamakli tum sayilarin birbiri ile carpimina gore:
print('Correct: {}'.format(len(correct)))  # toplam dogru sayisi
print('Incorrect: {}'.format(len(incorrect)))  # toplam yanlis sayisi
Tarih: 2018-03-04
Kategoriler: günlük