当前位置:首页 » 编程语言 » 怎么用c语言求整数的最大公约
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

怎么用c语言求整数的最大公约

发布时间: 2022-08-27 19:19:01

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;
}