PDA

View Full Version : سوال: بزرگترین مقسوم علیه مشترک و کوچکترین مضرب مشترک به روش غربال آراتستن



Hamid2547
دوشنبه 14 آذر 1390, 05:00 صبح
میخواستم ب میم میم و ک میم میم دو عدد رو به روش آراتستن حساب کنم ولی توی شرط حلقه مشکل دارم،کتابی که مسئله رو ازش اوردم توضیح میده که برای این منظور عدد بزرگتر رو بر عدد کوچکتر تقسیم میکنیم و اگر باقی مانده صفر شد عدد کوچکتر که مقسوم علیه هست ب میم میم هست ولی اگر صفر نشد مقسوم علیه رو جای مقسوم و باقی مانده رو جای مقسوم علیه قرار میدیم و عمل تقسیم رو تا زمانی که صفر بشه ادامه میدیم،من هر چی فکر کردم نتونستم شرط حلقه رو در بیارم و اگر کسی بتونه در این مورد کمک کنه ممنون میشم،الگوریتمی که کتاب برای این موضوع ارائه کرده و کد خودم رو قرار میدم.

78745


static void Main(string[] args)
{
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int temp;
int kmm;
int m,n;


m = a;
n=b;


if (a < b)
{
temp = a;
a = b;
b = temp;

}


if (a % b == 0)
{


Console.WriteLine("The bmm is {0}", b);

}

else {

while (a % b != 0)
{
a = a / b;
b = a % b;

if (a % b == 0)
{
Console.WriteLine("The bmm is {0}", b);

}

}

}

kmm = m * n / b;
Console.WriteLine("The kmm is {0}",kmm);
Console.ReadLine();

Hamid2547
دوشنبه 14 آذر 1390, 19:04 عصر
مشکل حل شد،بیشتر نمونه برنامه هایی که به صورت غیر بازگشتی حل شده بود مقسوم علیه رو توی شرط قرار میداد که باعث خطای دیواید بای زیرو توی جاهای دیگه میشد که یا اشتباه بود و یا من دلیلش رو نمیفهمیدم مثل این برنامه:


static int GCD(int a, int b)
{
int Remainder;

while( b != 0 )
{
Remainder = a % b;
a = b;
b = Remainder;
}

return a;
}




همون برنامه ی اولی ولی اصلاح شده:

static void Main(string[] args)
{
int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int temp;
int kmm;
int m, n, r;


m = a;
n = b;


if (a < b)
{
temp = a;
a = b;
b = temp;

}


if (a % b == 0)
{


Console.WriteLine("The bmm is {0}", b);

}

else
{

do
{
r = a % b;
a = b;
b = r;

if (r == 0)
{
Console.WriteLine("The bmm is {0}", a);

}

}
while (r != 0);
}

kmm = m * n / a;
Console.WriteLine("The kmm is {0}", kmm);
Console.ReadLine();