C語言求最小的的公倍數
main()
{
int p,r,n,m,temp;
printf("Please enter 2 numbers n,m:");
scanf("%d,%d",&n,&m);//輸入兩個正整數.
if(n<m)//把大數放在n中,把小數放在m中.
{temp=n;
n=m;
m=temp;
}
p=n*m;//P是原來兩個數n,m的乘積.
while(m!=0)//求兩個數n,m的最大公約數.
{
r=n%m;
n=m;
m=r;
}
printf("Its MAXGongYueShu:%d\n",n);//列印最大公約數.
printf("Its MINGongBeiShu:%d\n",p/n);列印最小公倍數.
基本原理如下:
用歐幾里德演算法(輾轉相除法)求兩個數的最大公約數的步驟如下:
先用小的一個數除大的一個數,得第一個余數;
再用第一個余數除小的一個數,得第二個余數;
又用第二個余數除第一個余數,得第三個余數;
這樣逐次用後一個數去除前一個余數,直到余數是0為止。那麼,最後一個除數就是所求的最大公約數(如果最後的除數是1,那麼原來的兩個數是互質數)。
例如求1515和600的最大公約數,
第一次:用600除1515,商2餘315;
第二次:用315除600,商1餘285;
第三次:用285除315,商1餘30;
第四次:用30除285,商9餘15;
第五次:用15除30,商2餘0。
1515和600的最大公約數是15。
兩個正整數的最小公倍數=兩個數的乘積÷兩個數的最大公約數
由於兩個數的乘積等於這兩個數的最大公約數與最小公倍數的積。這就是說,求兩個數的最小公倍數,可以先求出兩個數的最大公約數,再用這兩個數的最大公約數去除這兩個數的積,所得的商就是兩個數的最小公倍數。
例 求105和42的最小公倍數。
因為105和42的最大公約數是21,
105和42的積是4410,4410÷21=210,
所以,105和42的最小公倍數是210。
❷ C語言求最小公倍數怎麼求
#include <stdio.h>
int GCD(int num1,int num2)
{
if (num1 % num2 == 0)
return num2;
else
return GCD(num2, num1 % num2);
}
int LCM(int a,int b)
{
int temp_lcm;
temp_lcm = a*b/GCD(a, b); //最小公倍數等於兩數之積除以最大公約數
return temp_lcm;
}
int main()
{
int a,b;
while (scanf("%d%d",&a,&b)!= EOF)
{
printf("%d\n",LCM(a,b));
}
return 0;
}
先求出最大公約數,
最小公倍數由最大公約數轉化過去
最大公約數由遞歸就可以出來了
望採納謝謝
❸ c語言最小公倍數的求法
c語言最小公倍數的求法如下:
兩個或多個整數公有的倍數叫做它們的公倍數,其中除0以外最小的一個公倍數就叫做這幾個整數的最小公倍數。整數a,b的最小公倍數記為[a,b],同樣的,a,b,c的最小公倍數記為[a,b,c],多個整數的最小公倍數也有同樣的記號。
與最小公倍數相對應的概念是最大公約數,a,b的最大公約數記為(a,b)。關於最小公倍數與最大公約數,我們有這樣的定理:(a,b)x[a,b]=ab(a,b均為整數)。
方法一:窮舉法
假設有兩個整數num1和num2,這兩個整數的最小公倍數一定大於等於它們的最大值,同時小於等於它們的積。按從小到大的順序遍歷整個范圍內的所有整數,第一個公因數即為它們的最小公倍數。【不考慮負數,求負數的最小公倍數本就是無意義的(相當於求兩個正數的最大公倍數)】
❹ c語言如何求最小公倍數
按照數學定義求。
最簡單的 從較大數開始,一直累加出一個兩個的共同倍數。
也可以先求最大公約數 然後用兩個數的積除以最大公約數
intfunc(inta,intb)
{
intr;
for(r=a;;r++)
if(r%a==0&&r%b==0)break;
returnr;
}
❺ 如何用C語言求最小公倍數。。。
我代碼復制給你看。
#include<stdio.h>
int GCD(int a,int b) //GCD表示最大公約數
{
int z= a<b?a:b; //我從輸入的兩個數中較小的那個開始判斷是不是最大公約數,不是就一直-1
while(z>=1) // 直到找到能同時被X,Y整除的數,它就是最大公約數了。
{
if(a%z==0&&b%z==0) break;//最快滿足這個條件的Z就是最大公約數
z--;
}
return z;
}
int LCM(int a,int b) //LCM表示最小公倍數
{
int z=a>b?a:b; //我從輸入的兩個數中最大的那個開始判斷是不是最小公倍數,不是就一直+1
while(z<=(a*b)) //兩個非零數a,b,我們知道a*b肯定是它的公倍數 ,所以從兩個數的最大那個數開始
{ //一直到a*b肯定存在最小公倍數
if(z%a==0&&z%b==0)break; //最快滿足這個條件的Z就是最小公倍數
z++;
}
return z;
}
int main()
{
while(1)
{
int x,y,z,d;
printf("請輸入兩個整數:");
scanf("%d %d",&x,&y);
z=GCD(x,y);
d=LCM(x,y);
printf("這兩個數的最大公約數是%d\n",z);
printf("這兩個數的最小公倍數是%d\n",d);
printf("\n");
}
}
❻ c語言求最小公倍數
1、首先介紹一下求最小公倍數的經典方法:
輾轉相除法
有兩整數a和b:
①a%b得余數c
②若c=0,則b即為兩數的最大公約數
③若c≠0,則a=b,b=c,再回去執行①
a*b除以最大公約數等於最小公倍數
2、因此原問題也化為最小公倍數和最大公約數一起求了。程序的演算法如下:
#include<stdio.h>
int lowest_common_multiple(int m,int n);
int main()
{
int m,n,c;
printf("請輸入m的值: ");
scanf("%d",&m);
printf("請輸入n的值: ");
scanf("%d",&n);
c=lowest_common_multiple( m, n);
printf("請輸出最小公倍數c的值: ");
printf("%d ",c);
return 0;
}
int lowest_common_multiple(int m,int n)
{
int remainder,m1,n1;
m1=m;
n1=n;
while (n != 0) {
remainder = m % n;
m = n;
n = remainder;
}
//printf("輸出最大公約數m: %d ", m); //此時的m為最大公約數
return m1*n1/m;
}
3、程序的輸出如下:
4、此題注釋的哪一個是輸出最大公約數的。