ب م م در پایتون با مثال و کد – به زبان ساده

۹۱
۱۴۰۵/۰۲/۲۶
۱۰ دقیقه
PDF
آموزش متنی جامع
امکان دانلود نسخه PDF

ب م م مخفف عبارت «بزرگ‌ترین مقسوم علیه مشترک» ( Greatest Common Divisor | GCD) است. محاسبه ب م م یعنی پیدا کردن بزرگترین عدد صحیح مثبتی که دو عدد صحیح دیگر بر آن بخش‌پذیر هستند. برای مثال ۲۰ و ۱۰ هر دو بر اعداد ۱ و ۲و ۴ و ۵ و ۱۰ بخش‌پذیراند. اما بزرگترین مقسوم علیه مشترک آن‌ها عدد ۱۰ است. پس ب م م ۲۰ و ۱۰ برابر با ۱۰ می‌شود. این عملیات ریاضی کاربرد‌های زیادی در علوم کامپیوتر و به طور خاص حوزه رمزنگاری دارد. علاوه بر آن تمرین نوشتن الگوریتم‌ ب م م یکی از روش‌های خوب برای کسب مهارت در تابع نویسی است. در این مطلب از مجله فرادرس، روش‌های مختلف محاسبه ب م م در پایتون را بررسی می‌کنیم.

آنچه در این مطلب می‌آموزید:
  • در این مطلب یاد می‌گیرید که ب م م چیست، چه کاربردهایی دارد و چطور آن را محاسبه کنید.
  • با توابع مهم و کاربردی کتابخانه math برای محاسبه ب م م در پایتون آشنا می‌شوید.
  • با چند مثال، حالت‌های مجزای استفاده از تابع math.gcd را برای پیدا کردن ب م م مرور می‌کنید.
  • روش نوشتن الگوریتم محاسبه ب م م در پایتون را به صورت تابع یاد می‌گیرید.
  • روش نوشتن الگوریتم اقلیدسی برای محاسبه ب م م را می‌آموزید.
  • روش استفاده از توابع پایتون برای محاسبه ب م م برای چند عدد مجزا را یاد می‌گیرید.
ب م م در پایتون با مثال و کد – به زبان سادهب م م در پایتون با مثال و کد – به زبان ساده
997696

در این مطلب با تکنیک‌های مختلف محاسبه GCD در پایتون آشنا می‌شویم. «GCD» معادل عبارت «ب م م» است. ابتدا مفهوم این عملیات ریاضی را توضیح داده و با کمک مثال ساده‌ای روش کار آن را در پایتون نشان می‌دهیم. سپس کاربردی‌ترین روش‌های محاسبه GCD در پایتون را یک به یک بررسی کرده و برای هر کدام مثال می‌زنیم. در پایان هم دو روش ساده را برای محاسبه ب م م بین چند عدد مختلف بررسی می‌کنیم.

ب م م در پایتون چیست؟

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

در کادر پایین یکی از روش‌های ساده محاسبه ب م م در پایتون را پیاده‌سازی کرده‌ایم.

بعد از نوشتن کد بالا در کد ادیتور و اجرای آن، مفسر پایتون، عدد 12  را در خروجی نمایش می‌دهد. یعنی اینکه ب م م ۴۸ و ۶۰ برابر با ۱۲ است. اعداد ۶۰ و ۴۸ دارای ۶ مقسوم علیه مشترک (‌یعنی ۱ و ۲ و ۳ و ۴ و ۶ و ۱۲) هستند. در این مجموعه، ۱۲ از بقیه ارقام بزرگتر است.

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

  • استفاده از تابع math.gcd()
  • نوشتن تابع برای محاسبه ب م م در پایتون
  • استفاده از الگوریتم اقلیدسی برای پیدا کردن ب م م در پایتون
  • محاسبه ب م م بر روی چند عدد مجزا
نمونه‌ای از ماشین محاسبه ب م م در پایتون
نمونه‌ای از ماشین محاسبه ب م م در پایتون

در بخش‌های بعد تمام روش‌های بالا را یک به یک همراه با مثال معرفی می‌کنیم.

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

برای نصب اپلیکیشن رایگان مجله فرادرس، کلیک کنید.

استفاده از تابع math.gcd

کتابخانه Math در پایتون یکی از کاربردی‌ترین ابزارها برای انجام محاسبات ریاضی با کمک این زبان برنامه نویسی است. در این کتابخانه تابعی با نام gcd() تعریف شده است. این تابع وظیفه محاسبه GCD در پایتون یا همان ب م م دو عدد صحیح را بر عهده دارد. روش کار با آن بسیار ساده است. همین‌طور که در مثال ابتدای مطلب مشاهده کردید فقط باید کتابخانه math را به محیط کدنویسی وارد کنیم. سپس با کمک تابع math.gcd() می‌توانیم مقدار ب م م را بدست بیاوریم.

سینتکس مورد ستفاده برای این دستور را در کادر پایین نوشته‌ایم.

math.gcd(x, y)
تمام کلمات کلیدی سینتکس بالا را در فهرست پایین معرفی کرده‌ایم.
  • math: این کلمه نام همان کتابخانه‌ای است که تابع gcd() در آن تعبیه شده است.
  • gcd(): نام تابع مخصوص محاسبه ب م م در پایتون است.
  • x: یکی از پارامتر‌های تابع است. این پارامتر‌ها باید از نوع عدد صحیح باشند.
  • y: یکی از پارامتر‌های تابع است. این پارامتر‌ها باید از نوع عدد صحیح باشند.
جزءتوضیح ساده
mathکتابخانه شامل تابع gcd()
gcd()تابع محاسبه ب م م
xعدد اول (صحیح)
yعدد دوم (صحیح)

درباره سینتکس بالا ۲ نکته مهم وجود دارد.

نکته اول: به‌جای وارد کردن کل کتابخانه math می‌توانیم فقط تابع gcd() را وارد کنیم. در این صورت برای اجرای این عملیات فقط کافی است که دستور را به صورت gcd(x, y) بنویسیم. به منظور اجرای این کار، دستور ایمپورت در پایتون را به صورت from math import gcd می‌نویسیم.

نکته دوم: هر کدام از پارامتر‌های x و y می‌توانند صفر نیز باشند.

مثال اول: ب م م دو عدد صحیح

در کادر زیر، مقدار ب م م اعداد 24  و 108  را محاسبه کرده‌ایم.

بعد از نوشتن کد بالا در ادیتور و اجرای آن، مفسر پایتون، عدد 12  را در خروجی نمایش می‌دهد. اعداد 24  و 108  دارای ۶ مقسوم علیه مشترک (‌یعنی 1 و ۲ و ۳ و ۴ و ۶ و ۱۲) هستند.

مثال دوم: ب م م با پارامتر صفر

در کادر پایین، حالت استثنایی را محاسبه کرده‌ایم که در طول آن مقدار یکی از پارامتر‌های تابع gcd() برابر با صفر قرار داده شده است.

بعد از اجرای کد بالا، مفسر پایتون عدد 25 را در خروجی نمایش می‌دهد. هر وقت یکی از پارامتر‌های تابع gcd() برابر با 0 قرار بگیرند، پارامتر دوم به عنوان پاسخ در خروجی این عبارت برگردانده می‌شود.

مثال سوم: ب م م دو عدد اول نسبت به هم

در این مثال می‌خواهیم مقدار ب م م اعدادی را حساب کنیم که نسبت به همدیگر اول هستند.

بعد از نوشتن کد بالا در ادیتور و اجرای آن، مفسر پایتون، عدد 1  را در خروجی نمایش می‌دهد.

توجه کنید که اعداد 17 و 29 نسبت به همدیگر اول هستند. بنابراین هیچ مقسوم‌ علیه مشترکی به غیر از عدد 1 ندارند.

یادگیری پایتون از صفر تا صد با فرادرس

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

مجموعه آموزش برنامه نویسی پایتون Python – مقدماتی تا پیشرفته
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزش برنامه نویسی پایتون Python از مقدماتی تا پیشرفته هدایت شوید.

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

در پایین، چند مورد از فیلم‌های مربوط به آموزش زبان پایتون را معرفی کرده‌ایم.

در بخش بعد روش محاسبه مقدار GCD در پایتون به صورت دستی را یاد می‌گیرید.

نوشتن تابع برای محاسبه ب م م در پایتون

به این روش «بروت فورس» (Brute Force) هم گفته می‌شود. در کل اصطلاح Brute Force به معنای بررسی تمام گزینه‌های ممکن است. از این کلمه در حملات رمز‌گشایی هم استفاده می‌شود.

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

در رویکرد بروت فورس خودمان تابعی می‌نویسیم که تمام اعداد ممکن برای مقسوم علیه مشترک شدن را بررسی کند. در این روش از عدد ۱ تا پارامتر کوچک‌تر به ترتیب یک به یک بررسی می‌شوند.

  1. برای مثال اگر بخواهیم ب م م دو عدد مجزا را پیدا کنیم، اول باید با کمک تکنیک‌های محاسبه قدر مطلق در پایتون مقدار مثبت هر دو پارامتر را محاسبه کنیم.
  2. سپس پارامتر کوچک‌تر را شناسایی می‌کنیم.
  3. بعد از آن با کمک حلقه for در پایتون تمام اعداد صحیح مثبت بین 1 تا آن عدد را یک به یک بررسی می‌کنیم.
  4. هر عددی که به صورت همزمان مقسوم علیه هر دو پارامتر بود را در متغیری (در این مثال به نام gcd) ذخیره می‌کنیم.
  5. در نهایت مقدار gcd را به عنوان بزرگترین مقسوم علیه مشترک یا ب م م در خروجی تابع برمی‌گردانیم.
مرحلهکار انجام شدهتوضیح ساده
1گرفتن قدر مطلق اعدادتبدیل به عدد مثبت
2پیدا کردن عدد کوچک‌ترتعیین محدوده بررسی
3اجرای حلقه از 1 تا عدد کوچک‌تربررسی همه اعداد
4بررسی مقسوم‌علیه مشترکعددی که هر دو را تقسیم کند.
5ذخیره مقدارنگه داشتن بزرگ‌ترین مقدار
6بازگرداندن نتیجهنمایش ب م م

نکته: توجه کنید که چون حلقه از ۱ شروع به پیمایش می‌کند، بنابراین هر لحظه بزرگترین ب م م در متغیر قرار دارد.

بعد از اجرای کد بالا، مفسر پایتون عدد 12 را در خروجی نمایش می‌دهد.

فلوچارت حلقه برای کشف ب م م با الگوریتم اقلیدسی
فلوچارت حلقه مورد استفاده برای کشف ب م م با الگوریتم اقلیدسی

در فهرست زیر، تمام کدهای مهم بالا را به صورت صریح و شفاف توضیح داده‌ایم.

  1. a, b = abs(a), abs(b) : در این خط کد، با هدف مدیریت مقادیر ورودی منفی، هر دو مقدار داده شده به تابع را به عدد مثبت تبدیل کرده‌ایم.
  2. gcd = 1 : در این خط، متغیر gcd را تعریف و مقداردهی اولیه کردیم. از این متغیر برای ذخیره کردن ب م م استفاده می‌کنیم.
  3. for i in range(1, min(a, b) + 1): این حلقه بر روی تمام اعداد موجود بین 1 تا کوچک‌ترین مقدار a و b پیمایش می‌کند.
  4. if a % i == 0 and b % i == 0: با کمک این عبارت شرطی بررسی می‌کنیم که آیا a و b به صورت همزمان بر i بخش‌پذیر هستند یا نه.
  5. gcd = i: در صورتی که شرط بالا درست ارزیابی شود، با کمک این کد مقدار متغیر gcdرا به‌روزرسانی می‌کنیم.

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

پیدا کردن ب م م در پایتون با کمک الگوریتم اقلیدسی

«الگوریتم اقلیدسی» (Euclidean Algorithm) روش بسیار مناسبی برای محاسبه ب م م است. در کادر پایین، کدهای مربوط به تعریف تابع با کمک این الگوریتم را نوشته‌ایم.

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

  1. a, b = abs(a), abs(b): در این خط کد، با هدف مدیریت مقادیر ورودی منفی، هر دو مقدار داده شده به تابع را به عدد مثبت تبدیل کرده‌ایم.
  2. while b != 0: این حلقه تا زمانی کار می‌کند که مقدار b به 0 برسد.
  3. a, b = b, a % b: این دستور در داخل حلقه به طور دائم مقدار a را برابر با b قرار داده و مقدار b را هم مساوی با باقیمانده عملیات a ÷ b  قرار می‌دهد. این عملیات، مرحله کلیدی در الگوریتم اقلیدسی است.
  4. return a: در این الگوریتم هر وقت که مقدار b برابر با 0 بشود، یعنی آنکه a برابر با بزرگترین مقسوم علیه مشترک شده است.

کسب مهارت در پایتون همراه با اجرای پروژه های فرادرس

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

در پایین، چند مورد از فیلم‌‌های آموزش پروژه‌محور زبان پایتون را معرفی کرده‌ایم.

با کلیک بر روی تصویر زیر می‌توانید به صفحه اصلی این مجموعه آموزشی، هدایت شده و فیلم‌های پروژه‌محور بیشتری را مشاهده کنید.

مجموعه آموزش پروژه محور برنامه نویسی پایتون (Python)
با کلیک بر روی تصویر بالا می‌توانید به صفحه اصلی مجموعه فیلم‌های آموزش پروژه محور برنامه نویسی پایتون هدایت شوید.

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

محاسبه ب م م در پایتون برای چند عدد

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

  • خود تابع math.gcd()
  • تابع functools.reduce()

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

محاسبه ب م م چند عدد با کمک تابع math.gcd

خود تابع math.gcd() هم می‌تواند همزمان چندین ورودی مختلف دریافت کند. یعنی محدود به ۲ عدد اینتیجر نیست. برای محاسبه ب م م بین چند عدد، فقط کافیست که تمام آن‌ها را درون پرانتز‌های تابع math.gcd() نوشته و بین آن‌ها با کاما «, » فاصله بگذاریم.

بعد از اجرای کد بالا، مفسر پایتون عدد 54  را در خروجی نمایش می‌دهد.

ماشین ساخته شده با پایتون برای محاسبه ب م م در پایتون

محاسبه ب م م چند عدد با تابع functools.reduce

برای محاسبه ب م م چند عدد در پایتون می‌توانیم از تابع functools.reduce()  نیز کمک بگیریم. فرض کنیم لیستی از اعداد صحیح داده شده است. این تابع می‌تواند تابع math.gcd() را دو به دو بر روی تمام اعداد موجود در لیست اجرا بکند. با کمک ترکیب این توابع، می‌توانیم مقدار ب م م تمام اعداد تعریف شده در لیست را محاسبه کنیم.

بعد از اجرای کد بالا، مفسر پایتون عدد 16  را در خروجی نمایش می‌دهد. دستور reduce(math.gcd, nums) ، تابع math.gcd() از اول بر روی دو عنصر ابتدایی لیست اعمال می‌کند. سپس آن را بر روی نتیجه بدست آمده و عنصر بعدی اعمال می‌کند. به همین ترتیب تا به انتهای لیست پیش می‌رود. در آخر، عدد بدست آمده را در متغیر res  قرار می‌دهد. این عدد همان مقدار ب م م برای تمام اعضای لیست است.

در این مثال لیست nums = [48, 64, 80]  داده شده است. مقدار ب م م برای دو عضو اول با دستور gcd(48, 64)  برابر با 16  بدست می‌آید. سپس مقدار ب م م برای 16  و عدد بعدی در لیست با دستور gcd(16, 80)  محاسبه می‌شود. این مقدار هم برابر با 16  است.

توجه: نمی‌توانیم از لیست به عنوان ورودی در تابع math.gcd() استفاده کنیم. اگر تعداد اعداد خیلی زیادی در لیست ذخیره شده بودند، بهترین روش، استفاده از تابع functools.reduce()  است.

جمع بندی

در این مطلب از مجله فرادرس روش محاسبه ب م م در پایتون را به صورت کامل بررسی کرده‌ایم. ابتدا این عملیات ریاضی را تعریف کرده و با کمک مثال ساده‌ای روش محاسبه آن را نشان دادیم. سپس پرکاربرد‌ترین تکنیک‌های آن مانند استفاده از تابع math.gcd() و نوشتن الگوریتم به صورت دستی را نشان داده‌ایم. مهم‌ترین کاربرد ب م م در پایتون مربوط به حوزه رمزنگاری می‌شود. برای نوشتن الگوریتم دستی هم می‌توانیم از روش بروت فورس برای بررسی تک به تک اعداد قابل پذیرش به عنوان مقسوم‌علیه استفاده کنیم و هم اینکه الگوریتم اقلیدسی را بنویسیم.

با کمک توابع پایتون می‌توانیم مقدار ب م م را برای چندین عدد مختلف محاسبه کنیم. یکی از روش‌های اینکار استفاده از خود تابع math.gcd() است. روش دیگر هم شامل کمک گرفتن از تابع reduce(math.gcd, nums) می‌شود. نوشتن دستی تابع برای انجام این عملیات هم تمرین خیلی خوبی در حوزه کد نویسی برای افراد مبتدی به حساب می‌آید.

بر اساس رای ۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر پرسشی درباره این مطلب دارید، آن را با ما مطرح کنید.
منابع:
GeeksforGeeksCodecademy
PDF
مطالب مرتبط
نظر شما چیست؟

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