c語言求最大公約數和最小公倍數應該怎麼做
最大公因數;也稱最大公約數、最大公因子,指兩個或多個整數共有約數中最大的一個
材料/工具
電腦,C語言
方法
輾轉相減法:即尼考曼徹斯法,其特色是做一系列減法,從而求得最大公約數。輾轉相減法即通過對兩數的不斷減法運算。假設兩數為 x, y。
當 x > y 時,令 x = x - y;
反之,則令 y = y - x;
之後一直輾轉相減,直至 x = y 時,終止。
代碼如下:
窮舉法又稱枚舉法,通過對數值範圍內的所有數字進行檢驗,得出其結果。
代碼如下:
例如求27和15的最大公約數過程為:27÷15 餘1215÷12餘312÷3餘0因此,3即為最大公約數#include<stdio.h>void main() /*輾轉相除法求最大公約數 */ {int m, n, a, b, t, c; printf("Input two integer numbers:n"); scanf("%d%d", &a, &b); m=a; n=b; while(b!=0)/* 餘數不為0,繼續相除,直到餘數為0 */{ c=a%b; a=b;b=c;} printf("The largest common divisor:%dn", a); printf("The least common multiple:%dn", m*n/a);}
printf("Input two integer numbers:n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0)/* 餘數不為0,繼續相除,直到餘數為0 */
{ c=a%b; a=b;b=c;}
printf("The largest common divisor:%dn", a);
printf("The least common multiple:%dn", m*n/a);
}
擴展閲讀,以下內容您可能還感興趣。
c語言編程求最大公約數和最小公倍數
#include<stdio.h>
int main()
{
百int m,n;
int divisor,dividend,res;/*除數 被除數 餘數*/
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{
if(m>=n)
{
度divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
res=dividend%divisor;
while(res!=0)//循環體是三條語句,不加大括號循環只執行一條版語句
{
dividend=divisor;
divisor=res;
res=dividend%divisor;
}
printf("%d",divisor);
}
else
printf("error!\n");
return 0;
}
兩數相權乘除以最大公約數就是最小公倍數追問輾轉相除法要求較小的數除較大的數 但是用 c++取餘運算時 為什麼就可以不用比較大小,把if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
刪去也可以算出正確結果追答因為比較小的數對比較大的數取餘,餘數就是比較小的數,比如6%12,餘數為6,餘數不為0,此時算術變成12對6取餘,可以看到就算不判斷兩個數的大小,程序通過餘數交換最終也會變成大的數對小的數取餘,不判斷大小會造成程序碰到小的數在前面會多運行一次取餘運算,運行效率降低,因此一般都會進行判斷
c語言求最大公約數和最小公倍數
#include <stdio.h>
int divmax(int m,int n)
{
int r;
while (n!=0)
{
r=m%n;//////////////////1
m=n;
n=r;////////////////////2
}
return m;////////////////3
}
int mulmin(int m, int n)////////////4
{
int p;
p=m*n;
return (p/divmax(m,n));///////////5
}
int main()
{
int m,n,t;
printf("請輸入制兩個正百整數m,n:");
scanf("%d,%d",&m,&n);
if (m<n)
{
t=m;////////////////////////////6
m=n;////////////////////////////7
n=t;////////////////////////////8
}
printf("它們度的最大問公約數為:答%dn",divmax(m,n));
printf("它們的最小公倍數為:%dn",mulmin(m, n));//////////9
}
C語言程序改錯——求最大公約數和最小公倍數
最大公約數可以是zhidao1。
#include&版nbsp;<stdio.h>int main(void)
{
int a,b;
int min,max;
int i,s;
scanf("%d %d",&a,&b);
min=a<b?a:b;
max=a>b?a:b;
for(i=min;i>1;i--)//i>1改為i>=1
if((min%i==0)&&(max%i==0))
break;
if(i=1)//此行刪權除
printf("no answer");//此行刪除
s=max;
for(s=max;;s++)
if((s%min==0)&&(s%max==0))
break;
printf("%d %d",i,s);
return 0;
}
程序設計問題:C語言求最大公約數和最小公倍數 要求用三種方法!
#include<stdio.h>main(){ int p,r,n,m,temp; printf("please input the data:\n"); scanf("%百d%d",&n&m); if(n<m){ temp=n; n=m; m=temp;} p=n*m; while(m!=0){ r=n%m; n=m; m=r;} printf("最大公倍數為度:%d\n",n); printf("最小公約數為:%d\n",p/n);} 這是我原來做的知程序。。印象中就是會這個。你先用着!其他的道我不會了~
c語言輸入兩個整數求最大公約數和最小公倍數
#include <stdio.h>
void main()
{
復int m,n,k=0,t,a,b;//k要初始化一下
printf("請輸入兩個正整數:");
scanf("%d%d",&m,&n);
a=m;
b=n;//用a和b保存輸入的兩個數,因為後面還要用到
if(m<n)
{
制t=m;
m=n;
n=t;
}//這裏應該是如果m<n就把m和n交換,不是知你那麼寫的
while(k!=0)
{
k=m%n;
m=n;
n=k;
}
printf("最大公約數:%dn",m);
printf("最小公倍數:%dn",a*b/m);//你m和n值已經變了,所道以要用ab
}