محاسبه ب.م.م و ک.م.م دو عدد با ++C یکی از مسائل مهم ریاضی است که همیشه با آنها برخورد داشتید. در این مطلب، آموزش محاسبه ب.م.م و ک.م.م دو عدد را قدم به قدم توضیح می دهیم.
سوال مسئله: برنامه ای بنویسید که ب.م.م و ک.م.م دو عدد را محاسبه کند و در خروجی نشان دهد.
محاسبه ب.م.م دو عدد
برای محاسبه ب.م.م دو عدد روش هایی زیادی وجود دارد که یکی از آن ها روش اقلیدسی است. در روش اقلیدسی در واقع دو عدد را بر یکدیگر تقسیم کرده و بعد از تقسیم باقی مانده را به عنوان عدد کوچک تر و مقسوم علیه را به عنوان عدد بزرگتر سپس دوباره عدد بزرگتر را به عدد کوچکتر تقسیم میکنیم. این روش را آنقدر ادامه میدهیم تا باقی مانده ۰ شود آنگاه عدد کوچک تر ب.م.م دو عدد مورد نظر است.
حالا می خواهیم این روش را به زبان ++C پیاده سازی کنیم. فقط کد نویسی قسمت هایی مثل دریافت دو عدد از کاربر و نمایش متن به کاربر، از توضیح دادن میپرهیزیم (چون ساده است) و فقط قسمت اصلی کد را شرح میدهیم.
فرض کنید از کاربر دو عدد را دریافت کرده و آن ها را در متغیر هایی به نام های a و b ریخته ایم. از آنجایی که در روش اقلیدسی یک عملیات (تقسیم کردن) تکرار میشود در نتیجه باید از حلقه در برنامه ی خود استفاده کنیم. کد این قسمت به صورت زیر است:
while(true){ if(b == 0) break; temp = a%b; a = b; b = temp; }
در این کد از یک حلقه استفاده میکنیم، و در ابتدای حلقه چک میکنیم که اگر عدد کوچکتر ما برابر ۰ شد از حلقه خارج میشود، همچنین از یک متغیر temp برای جابجایی مقادیر باقی مانده و a و b استفاده کردیم. درواقع درون این حلقه عدد بزرگتر جای خود را به عدد کوچکتر قبلی میدهد و سپس باقی مانده عدد بزرگتر بر عدد کوچک تر به عنوان عدد کوچکتر قرار میگیرد و زمانی که عدد کوچکتر برار ۰ شود عدد بزرگتر به عنوان ب.م.م در برنامه مورد استفاده قرار میگیرد. (با توجه به این نکته که ب.م.م هر عدد و ۰ خود همان عدد است)
روش اول کد محاسبه ب.م.م (شماره یک)
#include <iostream> using namespace std; int main(int argc, char** argv) { int a, b, temp; cout<<"adad avval ra vared konid : "; cin>>a; cout<<"adad dovvom ra vared konid : "; cin>>b; while(true){ if(b == 0) break; temp = a%b; a = b; b = temp; } cout<<"B.M.M do adad vared shode barabar ast ba :"<<a; return 0; }
روش دوم محاسبه ب.م.م (شماره دو)
در این روش ابتدا عدد بزرگتر را مشخص میکنیم و سپس حاصل تفریق آن بر عدد کوچتر را به جای عدد بزرگتر قرار میدهیم و سپس این عملیات را دوباره تکرار می کنیم و این روند را آنقدر ادامه میدهیم تا دو عدد با یکدیگر برابر شوند آنگاه ب.م.م دو عدد مقدار اعداد است.
#include <iostream> using namespace std; int main(int argc, char** argv) { int a, b, temp; cout<<"adad avval ra vared konid : "; cin>>a; cout<<"adad dovvom ra vared konid : "; cin>>b; while(a != b) { if(a > b) a -= b; else b -= a; } cout<<"B.M.M do adad vared shode barabar ast ba :"<<a; return 0; }

محاسبه ک.م.م دو عدد
#include <iostream> using namespace std; int main(int argc, char** argv) { int a, b, n1, n2, temp, kmm; cout<<"adad avval ra vared konid : "; cin>>a; cout<<"adad dovvom ra vared konid : "; cin>>b; n1 = a; n2 = b; while(true){ if(b == 0) break; temp = a%b; a = b; b = temp; } kmm = (n1 * n2) / a; cout<<"B.M.M do adad vared shode barabar ast ba :"<<a<<endl; cout<<"K.M.M do adad vared shode barabar ast ba :"<<kmm; return 0; }
روش دوم محاسبه ک.م.م (شماره دو، بدون استفاده از ب.م.م)
در این روش بدون استفاده از ب.م.م دو عدد مقدار ک.م.م ان دو را محاسبه میکنیم. میدانیم که حداقل مقدار ک.م.م دو عدد برابر عدد بزرگ تر است درنتیجه این مقدار را بر دو عدد تقسیم کرده تا زمانی اگه باقی مانده برابر ۰ شود (بخش پذیر باشد) در غیر این صورت این مقدار را یک واحد بالا برده و دوباره تقسیم را انجام میدهیم. این عمل را آنقدر تکرار میکنیم که باقی مانده عدد بر دو عدد مورد نظر برار صفر شود آنگاه آن عدد برابر ک.م.م دو عدد است.
#include <iostream> using namespace std; int main(int argc, char** argv) { int a, b, max; cout<<"adad avval ra vared konid : "; cin>>a; cout<<"adad dovvom ra vared konid : "; cin>>b; if(a > b) max = a; else max = b; while(true){ if(max % a == 0 && max % b == 0) break; else ++max; } cout<<"K.M.M do adad vared shode barabar ast ba :"<<max; return 0; }
در روش فوق، ابتدا عدد بزرگتر مشخص میشود و سپس این مقدار آنقدر افزایش میابد تا زمانی که باقی مانده تقسیم آن بر دو عدد وارد شده برابر با ۰ شود.
و نتیجه خروجی این برنامه به این صورت خواهد بود:
موفق و پیروز باشید
محمد
8 دی 1400
سلام، اگر یکی از اعداد صفر باشه مد نظر قرار نگرفته