جواب سوال 26 ProjectEuler: چرخه های متقابل Reciprocal cycles

پروژه اویلر

مسئله امروز خیلی چالش جالبی هست، من با کمی فکر روی این مسئله نتونستم به جواب برسم به خاطر همین جستجویی توی اینترنت انجام دادم به به جواب های متفاوتی رسیدم که خیلی از اونها گیج کننده هم بودند. اما سایت mathblog راه حلی که ارائه داده بود خیلی قابل فهم تر و جذاب تر بود هرچند کدی که نوشته بودند به زبان پایتون نبود و مقدار زیادی با راه حلی که من نوشتم متفاوت هست، اما اصول حل مسئله ای که من در اینجا ارائه دادم برمبنای راه حلی هست که در اون سایت قرار داده شده.

سوال 26 پروژه اویلر این هست:

نمایش اعشاری تقسیم اعداد 1 تا 10 به عدد 1 به این صورت می باشد:

1/2= 0.5

1/3= 0.(3)

1/4= 0.25

1/5= 0.2

1/6= 0.1(6)

1/7= 0.(142857)

1/8= 0.125

1/9= 0.(1)

1/10= 0.1

که معنی اعدادی که در پرانتز هستند یعنی تکرار بی نهایت آنها:

0.1(6) = 0.1666666666…

همانطور که مشاهده می کنید عدد تکرار شونده تک رقمی است، اما در عدد 7 می بینید که 6 رقم متفاوت درحال تکرار هستند. سوال مسئله این هست که برای اعداد کوچکتر از 1000 بزرگترین چرخه تکرار را برای تقسیم یک به این اعداد پیدا کنید.

عالی! امروز ترجیح می دهم که توضیحات اضافه نداده و فقط کدهارو منتشر کنم، اگر دوستان سوالی داشتند می تونن در بخش نظرات بپرسن:

maxRecurringCycle = 7
maxCount = 6
for i in range(8, 1000):
    remainder = 1 % i
    count = 0
    remaindersList = []
    while remainder not in remaindersList:
        remaindersList.append(remainder)
        remainder = (remainder * 10) % i
        count += 1

    if count > maxCount:
        maxCount = count
        maxRecurringCycle = i

print(maxRecurringCycle)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *