مساله ۲۲. حلقه طولانی

خروجی کد زیر در صورت اتمام چیست؟

x = [i for i in range(100)]
for i in range(1234567890123456789):
x[i % 100], x[(i * i) % 100] = x[(i * i) % 100], x[i % 100]
print(x[45])

لینک مساله در توویتر: https://twitter.com/Riazi_Cafe/status/1688797212602667008

پاسخ مسئله برابر با ۶۵ هست.

اولین مشاهده این هست که فقط اعداد با رقم یکان ۵ در خانه‌های با رقم یکان ۵ جابجا می‌شوند. برای همین کافی هست به جای ۱۰۰ عدد، فقط ۱۰ عدد ۵، ۱۵، …، ۹۵ را در نظر بگیریم.

در طول ۱۰۰ عملیات اول حلقه for ، موقعیت این اعداد به صورت زیر تغییر می‌کند:

5 -> 15 -> 35 -> 45 -> 55 -> 65 -> 75 -> 85 -> 95 -> 25 -> 5

چون طول این دور برابر با ۱۰ است، با ۱۰ بار تکرار این تغییرات به حالت اولیه برمی‌گردیم. به عبارت دیگر بعد از ۱۰۰۰ عملیات از حلقه for ،‌موقعیت این اعداد به حالت اول باز می‌گردد. به همین دلیل کافیست مسئله را برای حالتی که تعداد عملیات حلقه for برابر با ۷۸۹ هست که در این صورت پاسخ مسئله برابر با ۶۵ است