جواب سوال 29 پروژه اویلر: Distinct powers

پروژه اویلر

رسیدیم به سوال 29 سایت ProjectEuler که به ما میگه:

اگر a را به توان b برسانیم و a و b دو عدد صحیح بین 2 و پنج باشند، تمامی نتایج به این صورت خواهد بود:

22=4, 23=8, 24=16, 25=32
32=9, 33=27, 34=81, 35=243
42=16, 43=64, 44=256, 45=1024
52=25, 53=125, 54=625, 55=3125

که اگر جواب ها را به ترتیب و با حذف موارد تکراری لیست کنیم به تعداد 15 عدد خواهیم رسید:

4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

اگر a و b بین 2 و 100 باشند چه تعداد جواب خواهیم داشت؟

برای رسیدن به جواب، در مرحله اول محاسبه توان اعداد را داریم که با دو حلقه به راحتی قابل انجام است، اما برای شمارش جوابهای متمایز و حذف داده های تکراری راه های مختلفی را پیش رو داریم که بهترین و البته ساده ترین روش به این صورت است:

حذف داده های تکراری از لیست به کمک دستورات پایتون

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

# https://taghanaki.ir
mySet = {4}
for a in range(2, 101):
    for b in range(2, 101):
        mySet.add(a**b)

print(len(mySet))

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

نشانی ایمیل شما منتشر نخواهد شد.