یکی از مسائل ساده درس طراحی الگوریتم مسئله اعداد اول است که شرح آن را در فایل PDF زیر می توانید ملاحظه بفرمایید :

جهت مشاهده صورت مسئله بر روی عکس کلیک کنید:

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

مراحل کار به ترتیب زیر خواهند بود :

۱- عدد مورد نظر که با پیشفرض مسئله باید کوچکتر از ۱۰۰۰۰۰ باشد از ورودی دریافت می شود.

۲- در این برنامه اعداد اول ۱ تا  عدد خوانده شده از ورودی پیدا شده و داخل آرایه ای قرار می گیرند.
۳- زیر برنامه ی شمارش حالتهایی که می توان توسط مجموع اعداد اول بدست آمده ، بصورت متوالی و متمایز ، عدد مورد نظر را بدست آورد، فراخوانی می گردد.

در این زیر برنامه حلقه های تو در توی  i و j را خواهیم داشت ، بدین صورت که i حلقه خارجی می باشد و از ۰ تا تعداد عدد های اول بدست آمده می باشد ، همچنین حلقه j که حلقه داخلی است از i تا تعداد اعداد اول بدست آمده است.

در حلقه داخلی یک انباره خواهیم داشت که  اعداد اول موجود در آرایه را از خانه شماره i ام تا آخرین خانه با هم جمع می کند ، در حین جمع زدن اعدا با هم اگر مقدار این انباره برابر عدد اصلی که از ورودی خوانده بودیم شد یک واحد به شمارنده ای که ابتدا صفر بوده اضافه می گردد ( این شمارنده تعداد حالتهایی که می توان با مجموع اعداد اول بدست آمده به صورت متوالی و متمایز عدد مورد نظر را تولید کنیم می شمارد )

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

در انتها زمانی که برنامه از حلقه ها خارج می شود ، تعداد حالتهایی که توانستیم با اعداد اول بدست آمده عدد اولیه را بصورت متولی و متمایز تولید کنیم در داخل شمارنده ما قرار خواهد داشت که می توانیم آن را برای نمایش به main برنامه باز گردانیم

**نکته : شما می توانید برای حلقه داخلی از یک while استفاده نمایید تا  در هربار تکرار تنها تا زمانی که مجموع اعداد برابر و یا بزرگتر از عدد اولیه شد تکرار نماید.

دانلود کد مسئله اعداد اول

منبع : دانشجوی ایرانی


<-- این مطلب را با دوستان خود به اشتراک بگذارید
Facebook stumbleupon Digg Delicious Email Twitter