مجموع مضرب‌های اعداد 3 و 5 تا زیر 1000 را پیدا کن

سوال اینه: بیا مضرب‌های 3 یا 5 رو تا زیر 1000 بچین کنار هم. بعد این‌هارو باهم جمع کن. جوابش رو بهم بگو

بهترین راهکار این است که مساله را به قدم‌های کوچک‌کوچک بشکونیم.

پس اول بیاید مضرب‌های 3 یا 5 رو تا زیر 10 لیست کنیم و باهم جمعشان کنیم:

3,5,6,9

جمع این‌ها 23 است.

ادامه لیست را چه اعدادی پر می‌کنند؟

3,5,6,9,12,15,18,20,21,…

 

 یعنی می‌شه نشست تا 999 اعداد رو دونه دونه شمرد و باهم جمع کرد

تو نتیجه نگیری میمیری؟

 

من بهترشو بگم؟ می‌شه اعداد رو تا 999 یکی یکی خفت کرد و ببینیم به 3 و 5 بخش‌پذیر هستن یا نه، بعد باهم جمعشون کنیم

توی برنامه‌نویسی برای اینکه بفهمیم عددی  به یه عددی دیگر بخش‌پذیر هست یا نه، باید بگوییم اگر این دوتا را به هم تقسیم کردیم و باقی‌مانده صفر شد یا به عبارتی کف ترازو چیزی نماند، می‌گوییم بخش‌پذیرند.

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

قبل از هر چیز باید بیرون حلقه یک متغیری تعریف کنیم که مقدارش صفر باشد و با جریان در حلقه، به طور مداوم یکی به آن اضافه گردد.

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

حالا خره رو ول کنیم، برگردیم سر داستان خودمون.

پس تا اینجا فهمیدیم که ما متغیری داریم که مقدار اولیه‌اش صفر است و هر بار که در حلقه می‌چرخد یکی به آن اضافه می‌گردد. (یعنی جمع‌ها رو ما هر بار می‌ریزیم توی این ظرفه.)  اگر اسم این ظرف را کاسه بگذاریم و عددی که هربار خفتش می‌کنیم بذاریم b:

 

kase=0

:(for b in range(1,1000

     :if b%3 == 0 or b%5 == 0

        kase=kase+b

(Print (kase

چه عددی را چاپ کرد؟

یه سوال، اگر گفته بود اعداد زیر 1000000000 را حساب کنید، باید چیکار می‌کردیم؟

باید می‌زدیم تو سر خودمون

کد پایتون:

کد جاوا:

سوال: مجموع مضرب‌های اعداد 3 یا 5 تا زیر 1000000000 را پیدا کن



کانال تلگرام سحر نوشت | صفحه اینستاگرام

13 پاسخ
  1. آراز گفته:

    سرکار خانم و استاد بزرگوار عزیز(دردونه دنیای لینوکس)
    بسیار خوشحال و سپاس گزارم از آموزش های شما استاد گرانقدر.لطفا در زمینه پروژه اویلر (https://projecteuler.net/) نیز گوشه چشمی داشته باشید و برای آموزش قدم به قدم برنامه نویسی این سایت رو نیز ملاحظه بفرمائید بسیار علاقه مندم نحوه حل مسائل این سایت رو از زبان شیوا و لذت بخش قرار مطالعه کنم و از دنیای برنامه نویسی لذت ببرم.
    درود و سپاس بی کران

    پاسخ
    • سحر گفته:

      سلام مهندس
      شما لطف دارید، راهنمایی‌های شما به همه ما کمک می‌کنه
      چشم حتما
      این سایت عالیه و حتما مسائلشو اینجا حل می‌کنیم

      شاد باشین

      پاسخ
      • رضا گفته:

        من مثل بقیه دوستان که راه‌حل‌های خوبی گفتن، راه‌حل خاصی نداشتم. یک حلقه‌ی for که تا 1000 میرفت، اگر باقی‌مانده عدد فعلی در حلقه بر 3 برابر با 0 می‎‌شد، اون رو توی یک آرایه‌ای که از قبل تعریف کرده بودم push می‌کرد(تابع array_push در php). همین‌کار رو برای 5 هم کردم.
        در آخر این دوتا آرایه رو با تابع array_merge در php در همدیگه ادغام کردم و با استفاده از تابع array_sum جمع مقادیر درون آرایه رو به‌دست آوردم.
        نکته‌ای که داشت و من اول متوجه نشدم و به جواب درست نرسیدم این بود که اعداد نباید تکراری می‌بودن. یعنی مثلا 15 فقط یک‌بار باید در آرایه نهایی می‌بود. پس قبل از اینکه مضارب 5 رو توی آرایه‌ی خودشون بریزم، با تابع in_array چک می‌کردم که توی آرایه مضارب 3 وجود نداشته باشن.
        راستی توی سایتش گفته که توی جاهای مختلف جواب رو نگین، این کاری که می‌کنیم مصداق اون کار نیست؟:دی

        پاسخ
        • سحر گفته:

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

          https://projecteuler.net/

          پاسخ
  2. آرش محمدقلی نژاد گفته:

    برای ۱۰۰۰۰۰۰۰۰۰ که فقط کافیه حلقه ی فور ادیت شه ولی اگه خیلی ببزرگ باشه که نشه توی یه لانگ اینت و ….. هم جا شه باید از کتاب خونه ی بیگ اینتجر استفاده کرد یا خودمون بنویسیمش که خیلی سادش

    پاسخ
  3. ۱۱ گفته:

    سلام
    منم یه راه بدون استفاده از کامپیوتر بگم؟؟ :دی
    راهش اینه: تو دبیرستان دنباله‌های حسابی و سری‌های حسابی رو خوندیم دیگه؟
    برای محاسبه از همین ایده مضرب‌ها استفاده می‌کنم.
    سه تا دنباله داریم که مجموع جملاتشون تا قبل از ۱۰۰۰۰۰۰۰۰۰ رو میخواییم.
    دنباله اول دنباله حسابی با شروع از صفر و قدر نسبت ۳، بعدی باز هم با شده گرفتن شروع از صفر و قدر نسبت ۵ و آخری هم از صفر با قدر نسبت ۱۵.
    حالا میایم مجموع حملات کوچک‌تر از یک میلیارد رو حساب می‌کنیم.
    راه حل رو به صورت تشریحی این جا گذاشتم:

    https://www.mathcha.io/editor/Wj15Ux1SnLu4ysNd

    پس جواب می‌شه: 233333334166666668

    پاسخ
  4. ارسلان گفته:

    اینو امتحان کردم، نتیجش برای ورودی های ضریب 10 به این شکل بود:
    23
    2318
    233168
    23331668
    2333316668
    233333166668
    بعد از 1000 یه الگویی به خودش میگیره و فکر کنم با همین الگو بشه بدون نیاز به محاسبه، نتیجه اعداد نجومی روی این برنامه رو بدست اورد.

    پاسخ
    • سحر گفته:

      عالی!
      جوابش همون 233168 یعنی چیزی که شما توی سومی نوشتید
      برای عدد بزرگی مثل 1000000000 می‌شه سه تا فانکشن نوشت، که یکی بخش‌پذیرهای 3 رو حساب کنه، یکی بخش‌پذیرهای 5 و در آخر یکی بخش‌پذیرهای 15
      بعد بخش‌پذیرهای 3 و 5 رو باهم جمع کنیم و بخش‌پذیرهای 15 رو ازش کم کنیم
      یه راهکارش اینه
      خیلی خوشحال شدم که یه راهکار دیگه‌اش رو شما نوشتید

      پاسخ
      • آرش محمدقلی نژاد گفته:

        جواب هوشمندانه ایه ولی مگه برا این عدد همون کار بالا رو بکنیم چه ایرادی داره

        پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

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

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