4 Haziran 2014 Çarşamba

Problem 55 - Lychrel Numbers - Python

Problem 55 - Lychrel Numbers

Eğer 47 sayısını alır ters çevirir ve toplarsak 47+74 = 121 sayısını elde ederiz ki bu sayı palindromik bir sayıdır(sağdan ve soldan yazıldığında aynı).

Fakat her sayı bu kadar kolay palindrom üretmez. Örneğin:

349 + 943 = 1292
1292 + 2921 = 4213
4213 + 3124 = 7337


349 sayısının palindrome olması 3 öteleme gerektirdi.

Bazı sayılar, henüz kimse kanıtlamadı, asla palindrom sayı üretmezler, 196 gibi. Bu sayılara Lychrel sayıları denir. Biz burada kanıtlanmadığı için en fazla 50 ötelemeye kadar olup olmadığına bakacağız. Eğer 50 ötelemeye kadar bir palindrom üretmediyse Lychrel sayısıdır diyeceğiz. Fakat 50 ötelemenin sonrasında da palindrome olan sayılar var, misal
 4668731596684224866951378664 (53 öteleme, 28 basamaklı).

Soru: 10.000'in altında kaç Lychrel sayısı vardır?


Çözüm

def Palindromic(ntr): #Palindrome sayı test fn.
    n1 = str(ntr) #n1
    n2 = n1[::-1] #n2, n1'in tersten yazımı
    if n1==n2:
        return True
    else:
        return False

def isLychrel(n): #Lychrel sayısı test fn.
    counter = 0
    while counter<50: #Limit 50
        reverse = int(str(n)[::-1]) #Sayının tersiniri
        res = n + reverse #Tersiniri ile kendinin toplamı (res)
        if Palindromic(res): #Eğer bu sayı palindromik ise 
            return False
        else:
            n = res #Tekrar tersiniriyle toplayıp dene
        counter += 1
    return True

def main():
    counter = 0
    for n in range(10, 10001):
        if isLychrel(n):
            counter += 1
    print("Result: ",counter)

if __name__ == '__main__':

    main()

Cevap: 249


3 yorum:

  1. javascript ile mi çözdünüz

    YanıtlaSil
  2. ya herhangi girilen bir sayı için palindrom olup olmadığını araştırmasını istesek 50 adımda?

    YanıtlaSil
  3. ya herhangi girilen bir sayı için lychrel olup olmadığını araştırmasını istesek 20 adımda?

    YanıtlaSil