Ⅰ c語言求兩個正整數的最大公約數
求最大公約數的方法有很多。最常用的有如下兩種:
1 根據數學定義,可同時整除兩個操作數的最大整數,就是最大公約數:
intgcd(intm,intn)//求n和m的最大公約數
{
intmin=m>n?n:m;//兩個數的較小者。
while(min>0)
{
if(m%min==0&&n%min==0)break;//都能整除,則為最大公約數。
min--;
}
returnmin;
}
2 在演算法上,有專門的快速求最大公約數的演算法,稱為輾轉相除法:
以下是該演算法的遞歸實現:
intgcd(intx,inty)
{
if(!y)returnx;
returngcd(y,x%y);
}
Ⅱ 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"
main()
{ int factor(int a,int b);
int m,n;
scanf("%d%d",&m,&n);
factor(a,b);
}
int factor(int a,int b)
{ int t,i=1;
while (i<=a&&i<=b)
{ if(a%i==0&&b%i==0)
t=i;
i++;
}
printf ("最大公約數為%d\n",t);
return 0;
}
這樣應該能用了。
Ⅳ c語言編程:輸入兩個正整數,求最大公約數和最小公倍數
#include
voidmain(){
inta,b,n1,n2,t;
while(true)
{
printf("任意輸入兩個正整數: ");
scanf("%d%d",&n1,&n2);
if(n1
{
t=n1;
n1=n2;
n2=t;
}
a=n1;
b=n2;
while(b!=0){/*利用輾除法,直到b為0為止*/
t=a%b;
a=b;
b=t;
}
printf("最大公約數為:%d ",a);
printf("最小公倍數為:%d ",n1*n2/a);
}}
(4)怎麼用c語言求整數的最大公約擴展閱讀
C語言求最大公約數輾轉相除法
#include<stdio.h>
intgcd(intm,intn);//將輾轉相除的過程封裝為函數,使主函數結構清晰。
intmain(void)
{
inta,b;
while(~scanf("%d%d",&a,&b)){//多組數據輸入時的方式之一與while(scanf("%d%d",&a,&b)!=EOF)用途相同
printf("%d ",gcd(a,b));
return0;
}
intgcd(intm,intn)
{
returnn?gcd(n,m%n):m;//此函數將輾轉相除的過程以遞歸的形式呈現,簡化程序屬於常規套路。
}
Ⅳ C語言如何用指針求兩個正整數的最大公約數和最小公倍數呢
#include<stdio.h>
int main()
{
int a,b,t,r,x;
int *p,*q;//定義指針變數
p=&a;//指針p指向a
q=&b;//指針q指向b
scanf("%d%d",p,q);
if(*p<*q)//保證第一個數大於第二個數
{
t=*p;
*p=*q;
*q=t;
}
r=(*p)*(*q);
x=*p%*q;
while(x)//輾轉相除法求最大公約數;
{
*p=*q;
*q=x;
x=*p%*q;
}
//最小公倍數等於(兩數乘積除以最大公約數)
printf("最大公約數:%d 最小公倍數:%d",*q,r/(*q));
}
Ⅵ c語言求兩個數的最大公約數是多少
c語言求兩個數的最大公約數的步驟如下:
1、首先,新建一個C語言源程序,在這里使用的是Visual C++6.0的軟體。
以上就是c語言求兩個數的最大公約數的步驟了。
Ⅶ 怎麼用c語言編程求最大公約數
基本原理如下:
用歐幾里德演算法(輾轉相除法)求兩個數的最大公約數的步驟如下:
先用小的一個數除大的一個數,得第一個余數;
再用第一個余數除小的一個數,得第二個余數;
又用第二個余數除第一個余數,得第三個余數;
這樣逐次用後一個數去除前一個余數,直到余數是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。
Ⅷ 如何用C語言求兩個數的最大公約數的三種演算法
1、相減法
#include<stdio.h>
int
main()
{
int
a,b;
int
c=0;//計數器
while(1)//循環判斷的作用
{
printf("輸入兩個數字求最大公約數:");
scanf("%d%d",&a,&b);
while(a!=b)
{
if(a>b)
a=a-b;
else
b=b-a;
c++;
}
printf("最大公約數是:%d\n",a);
printf("%d\n",c);
}
return
0;
}
運行效果:
2、輾轉相除法:
#include<stdio.h>
int
a,b,temp;
int
Division(){
printf("請輸入兩個數(a,b):\n");
scanf("%d,%d",&a,&b);
if(a<b){
temp=a;
a=b;
b=temp;
}
while(a%b!=0){
temp=a%b;
a=b;
b=temp;
}
printf("最大公約數為:%d\n",b);
return
0;
}
3、窮舉法
#include<stdio.h>
int
main()
{
int
a,b,c;
int
d=0;//計數器
while(1)
{
printf("輸入兩個數字求最大公約數:");
scanf("%d%d",&a,&b);
c=(a>b)?b:a;//三目運算符
while(a%c!=0||b%c!=0)
{
c--;
d++;
}
printf("最大公約數是:%d\n",c);
printf("%d\n",d);
}
return
0;
}