سؤالات چالش برانگیز

مجموع ضرائب 3 یا 5
سطح مقدماتی 0

مجموع ضرائب 3 یا 5

ضرائب 3 یا 5 که کمتر از 10 هستند برابر با 3، 5، 6 و 9 است. مجموع این اعداد برابر با 23 است.

سؤال: مجموع ضرائب 3 یا 5 که کمتر از 1000 هستند را بدست آورید.

راه اول:

sum = 0
for i in range(1000):
    if i%3 == 0 or i%5 == 0:
        sum += i

راه دوم:

از لیست‌ها و مفهوم list comprehension استفاده می‌کنیم.

sum([i for i in range(1000) if i%3 ==0 or i%5 ==0])

این دو راه از نظر منطق الگوریتم تفاوتی ندارند. از نظر زمان اجرا، روش اول زمان اجرای بهتری دارد.

راه سوم:

مجموع ضرائب 3 را با مجموع ضرائب 5 جمع می‌کنیم و از مجموع ضرائب 15 کم می‌کنیم. دلیل این تفاضل این است که ضرائب 15 مانند 15، 30، 45 و ... هم ضریب 3 هستند و هم ضریب 5. بنابراین دو بار تکرار شده‌اند.

def func(n, r):
    a = n // r
    return r * a * (a+1) // 2
func(999, 3) + func(999, 5) – func(999, 15)

برای این کار هم نیازی به حلقه و استفاده از لیست نیست. به همین تفاوتی چندانی ندارد عدد n تا چه حد بزرگ باشد.

جواب نهایی: 233168

ارسال نظر

0 نظر