در این جلسه تیم کدگیت را با آموزش ب م م در سی شارپ(بزرگترین مقسوم علیه مشترک) همراهی کنید.. پیش نیاز این آموزش ، آشنایی با متد و دستور شرطی if است.
ب م م
بزرگترین مقسوم علیه مشترک یا ب م م بین دو عدد را عددی میگویند که بین مقسوم علیه های مشترک دو عدد، بزرگترین باشد. برای مثال ب م م دو عدد 4 و 8 میشود 4. ویژگی های بارز ب م م شامل موارد زیر هست:
- ب م م دو عدد یکسان میشود خود عدد
- ب م م هر عدد با صفر میشود صفر
- ب م م هر عدد با یک میشود 1
برای پیدا کردن ب م م روش ساده این است که تمامی مقسوم علیه های دو عدد را بنویسیم و بزرگترین عددی که بین آن دو مشترک هست را ب م م انتهاب کنیم.
پیاده سازی ب م م در سی شارپ
برای پیاده سازی ب م م در سی شارپ ما ایتدا نیاز به دو عدد داریم که آنها را a و b مینامیم. برای پیاده سازی ما از این روش استفاده میکنیم که عدد کوچکتر را در نظر میگیریم و تمامی اعداد بین 1 تا عدد کوچکتر را بر هر دو عدد تقسیم میکنیم اگر باقیمانده صفر شد ما آن عدد را به عنوان ب م م در نظر میگیریم. توجه داشته باشید که ما از عدد کوچکتر شروع میکنیم و یکی یکی به پایین حرکت میکنیم.
namespace GCD
{
class MainClass
{
public static void Main (string[] args)
{
int a = 11;
int b = 10;
int gcd = GCD(a, b);
Console.WriteLine(gcd);
Console.ReadKey ();
}
private static int GCD(int a, int b) {
int gcd = 0;
if (a == 0 || b == 0) {
gcd = 0;
} else {
if (a > b) {
for (int i = b; i > 0; i--) {
if (a % i == 0 && b % i == 0) {
gcd = i;
break;
}
}
} else if (a < b) {
for (int i = a; i > 0; i--) {
if (a % i == 0 && b % i == 0) {
gcd = i;
break;
}
}
} else {
// a == b
gcd = a;
}
}
return gcd;
}
}
}
سلام میشه با حلقه for یا while هم انجامش داد؟؟
سلام بله با حلقه While و For هم می توان این الگوریتم را نوشت.
میشه بزارید سایت؟
چون من فقط در حد for و while و if بلدم
هیچ متدی استاد یاد نداده
و ازمون همچین پروژه ای میخواد
سلام، کد زیر را برای محاسبه ب.م.م پیشنهاد میکنم:
public static int GCD(int a, int b)
{
int small = a b ? a : b;
if (small == 0 || small == 1)
return small;
int i = small;
for (;small % i != 0 || big % i != 0 ; i–) ;
return i;
}
ببخشید، بخشی از کد پاک شده و بقه متن بولد شده، نوشته بودم:
int big = a > b ? a : b;
int small = a < b ? a : b;
این روش هم که با استفاده از الگوریتم اقلیدس هست پیشنهاد میشه.
using System;
using System.Linq;
namespace BMM
{
public static class Program
{
public static void Main()
{
long a=int.Parse(Console.ReadLine());
long b=int.Parse(Console.ReadLine());
if(a>=b){
long c=a%b;
while(c!=0){
a=b;
b=c;
c=a%b;
}
Console.WriteLine(b);
}
if (b>a){
long c=b%a;
while(c!=0){
b=a;
a=c;
c=b%a;
}
Console.WriteLine(a);
}
}
}
}
سلام، کد زیر را برای محاسبه ب.م.م پیشنهاد میکنم:
public static int GCD(int a, int b)
{
int big = a > b ? a : b;
int small = a < b ? a : b;
if (small == 0 || small == 1)
return small;
int i = small;
for (;small % i != 0 || big % i != 0 ; i–) ;
return i;
}