C语言编程:输入两个正整数m和n,求它们的最大公约数。

供稿:hz-xin.com     日期:2025-01-13
C语言编程:输入两个正整数m和n,求其最大公约数和最小公倍数,急!急!

#include #include int main(void) { int n,m,i,j,t; scanf("%d%d",&n,&m); i = m > n ? m : n; j = m > n ? n : m; while(j) { t = i%j; i = j; j = t; } printf("
%d--%d",i,m*n/i); return 0; }

代码及注释如下:

#include <stdio.h>

int GCD(int a,int b)//定义函数,用来计算最大公约数

{    

return b==0?a:GCD(b,a%b);

//此处使用了递归,如果b=0,返回a为最大公约数,否则,一直以b与a%b赋给函数,实现辗转相除

}

int main()

{

int a, b ; //定义实参a, b

int answer ; //定义最后结果

scanf ( "%d%d" , &a, &b) ; //取a,b的值

answer = GCD (a, b) ; //把结果赋给answer

printf ( "%d与%d的最大公约数为%d
" , a , b , answer ) ; //输出结果

}

扩展资料:

辗转相除法求最大公约数的原理:

因为对任意同时整除a和b的数u,有a=su,b=tu,它也能整除r,因为r=a-bq=su-qtu=(s-qt)u。

反过来每一个整除b和r的整数v,有 b=sv , r=tv,它也能整除a,因为a=bq+r=svq+tv=(sq+t)v。

因此a和b的每一个公因子同时也是b和r的一个公因子,反之亦然。

这样由于a和b的全体公因子集合与b和r的全体公因子集合相同,所以a和b的最大公因子必须等于b和r的最大公因子,这就证明了上边的等式。即(a,b)=(b,r)。

因而,可以由此,得到两个数的最大公约数。



main()
{
int a,b,num1,num2,temp;
printf("请输入两个正整数:\n");
scanf("%d,%d",&num1,&num2);
if(num1<num2)/*选出较大数*/
{
temp=num1;
num1=num2;
num2=temp;
}
a=num1,b=num2;
while(b!=0)/*辗转取余算法*/
{
temp=a%b;
a=b;
b=temp;
}
printf("它们的最大公约数为:%d\n",a);
printf("它们的最小公倍数为:%d\n",num1*num2/a);/*两数相乘除最大公约数就是最小公倍数*/
}

比较简单的做法

#include "stdio.h"
void main()
{
int num1,num2;
printf("请输入两个正整数:\n");
scanf("%d%d",&num1,&num2);

while(num1 != num2)//当两数不等时,不停的用大数减小数,并把结果赋值给大数,相当于求余数
if(num1>num2)
num1 = num1-num2;
else
num2=num2-num1;

printf("他们的最大公约数是%d",num1);
}

//这种方法更简单,算法上运行效率更高,本人试过
inline int gcd(int m,int n)
{
while(m!=n)
{
if(m>n) m-=n;
if(m<n) n-=m;
}
return m;
}
下面调用gcd(,)函数就ok了

#include <stdio.h>
void main()
{
int a, b, c;

printf("请输入两个整数:");
scanf("%d%d", &a,&b);
c = a%b;
while(c) {
if(c) {
a = b;
b = c;
}
c = a % b;
}
printf("最大公约数:%d", b);
}
// 输入 20 60;输出 20

c语言编程:输入两个正整数m和n,求其最大公约数和最小公倍数。
int main(){ int num1, num2, t,p;printf("请输入两个正整数:");scanf("%d,%d", &num1, &num2);\/\/7,8 p = num1*num2;while (t = num1%num2)\/\/7 1 0,循环结束 { num1 = num2; \/\/8 7 num2 = t; \/\/7,循环继续 1 } p = p \/ num2;pr...

C语言编程:输入两个正整数m和n,求它们的最大公约数。
int num1,num2; printf("请输入两个正整数:\\n"); scanf("%d%d",&num1,&num2); while(num1 != num2)\/\/当两数不等时,不停的用大数减小数,并把结果赋值给大数,相当于求余数 if(num1>num2) num1 = num1-num2; else num2=num2-num1; printf("他们的最大公约数是%d",num1); } t...

C语言编程:输入两个正整数m和n,求它们的最大公约数。
printf ( "%d与%d的最大公约数为%d\\n" , a , b , answer ) ; \/\/输出结果 }

C语言编程:输入两个正整数m和n,求其最大公约数和最小公倍数,急!急!
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;...

C语言编程,输入两个正整数M和N(M<N),计算M和N之间的所有整数和
1、输入M和N;2、遍历从M到N的所有整数;3、每个累加;4、输出结果。参考代码:include <stdio.h>int main(){ int M,N,n,s=0; scanf("%d%d",&M,&N);\/\/输入 for(n = M; n <= N; n ++)\/\/遍历 s+=n;\/\/累加每个整数。 printf("%d\\n",s);\/\/输出结果。

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。用C语言编程
输入两个正整数m和n, 求其最大公约数和最小公倍数.<1> 用辗转相除法求最大公约数 算法描述:m对n求余为a, 若a不等于0 则 m <- n, n <- a, 继续求余 否则 n 为最大公约数 <2> 最小公倍数 = 两个数的积 \/ 最大公约数 include int main(){ int m, n;int m_cup, n_cup...

C语言:输入两个正整数m和n(要求m〈=n)求m!+(m+1)!+……n! 谢啦
long int sum=1,sum1=1,sum2=1,t;printf("请输入m>n\\n");scanf("%d",&m);scanf("%d",&n);while(m<n){ clrscr();printf("请重新输入m,n\\n");scanf("%d",&m);scanf("%d",&n);} for(i=1;i<=m;i++)sum=sum*i;for(i=1;i<=m-n;i++)sum1=sum1*i;for(i=1...

简单C语言程序
1.输入2个正整数m和n,求其最大公约数和最小公倍数 include include int main(){ int m,n,p,q,s,r;printf("请输入两个正整数;m,n\\n");scanf("%d,%d",&m,&n);s=m*n;if(m<n){ p=m;m=n;n=p;} printf("%d\\t%d\\n",m,n);\/*按从大到小输出m,n *\/ while(n!=0...

输入两个正整数m和n,求和,差,积,商,余数,C语言设计。
上面答案没有数据输入语句scanf,且麻烦, 改后如下:include<stdio.h>int main(){ int m,n; printf("请输入整数m="); scanf("%d",&m); printf("请输入整数n="); \/\/ 输入m,n scanf("%d",&n); printf("和=%d\\n",m+n); printf("差=%d\\n",m-n); printf("积=%d\\n"...

从键盘输入任意两个整数m和n,编程判断m和n的大小关系使m<n,并输出m和...
以下是Python语言的代码实现:python复制代码 m, n = map(int, input("请输入两个整数m和n:").split())if m < n:print(" m小于n")print(m, n)else:print(" m等于n")print(m, n)首先,使用map()函数将输入的字符串转换为整数类型,然后使用input()函数获取用户输入的两个整数m和n。