编程程序计算两个正整数的最大公约数(GCD) 要求: (1)提示用户输入两个数,并判断这两个数

供稿:hz-xin.com     日期:2025-01-13
编程提示用户输入两个正整数,并求出它们的最大公约数,分别实现下 面三种算法:

算法一:
#include
main()
{

int n1,n2,gcd=1,k=2;
scanf("%d %d",&n1,&n2);
while(k<n1||k<n2)
{
if(n1%k==0&&n2%k==0)
gcd=k;
k++;
}
printf("最大公约数为:%d",gcd);
}



算法二:
#include
void main()
{
int n1,n2,k,i;
scanf("%d %d",&n1,&n2);
if(n1>n2)
k=n2;
for(i=k;i>0;i--)
if(n1%i==0&&n2%i==0)
printf("最大公约数为:%d
",i);
}



算法三:
#include
void main()
{
int gcd(int n1,int n2);
int n1,n2,k;
scanf("%d %d",&n1,&n2);
k=gcd(n1,n2);
printf("最大公约数为:%d
",k);
}
int gcd(int n1,int n2)
{
if(n1%n2==0)
return n2;
else
return gcd(n2,n1%n2);
}

希望能帮助你,如有疑问请登录http://we.share.lc在线为您解答!

代码及注释如下:
#include
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)。
因而,可以由此,得到两个数的最大公约数。

#include <stdio.h>
int gcd(int m,int n)
{
if(!n)return m;
return gcd(n,m%n);
}
int main()
{
int m,n;
printf("请输入第1个正整数:");
while(1)
{
scanf("%d",&m);
if(m<=0)printf("输入了非正整数!!!\n请重新输入:");
else break;
}
printf("请输入第2个正整数:");
while(1)
{
scanf("%d",&n);
if(n<=0)printf("输入了非正整数!!!\n请重新输入:");
else break;
}
printf("这两个正整数的公约数为:%d\n",gcd(m,n));
return 0;
}

编程题:用while循环求两个正整数(键盘输入)的最大公约数和最小公倍...
include <stdio.h> int main(){ int m,n,r,tm,tn;scanf("%d %d", &m,&n ); \/\/输入两个数 tm=m;tn=n;if(m<n){ r=m;m=n;n=r;\/\/交换m,n } r=m%n;while(r){ m=n;n=r;r=m%n;} printf("最大公约数n=%d最小公倍数=%d\\n", n, tm*tn\/n );return 0;} ...

用C程序编写:输出两个正整数m和n,求其最大公约数和最小公倍数。
我给楼主说下思路:先输入两个整数,然后判断两数的大小,用大的数对小的取模,然后小的数自减直到余数为0,这个时候小的数就是两数的最大公约数,然后将输入的两个数相乘再除以做大公约数,得到的结果就是最小公倍数

求c语言程序。输入两个正整数m和n,求其最大公约数和最小公倍数。
= 0) { m_cup = n_cup; n_cup = res; res = m_cup % n_cup; } printf("Greatest common divisor: %d\\n", n_cup); printf("Lease common multiple : %d\\n", m * n \/ n_cup); } else printf("Error!\\n"); return 0; }辗转相除法求最大公约数最小公倍数 = 两个数的...

...最大公约数:输入两个正整数a和b,求它们的最大公约数.
{ 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...

编写程序:输入两个正整数m和n,计算它们的最大公约数和最小公倍数。
include<iostream> using namespace std ;\/\/最大公约数-Greatest Common Divisor int gcd(int m, int n){ return n == 0 ? m : gcd(n, m % n) ;} \/\/最小公倍数-Least Common Multiple int lcm(int m, int n){ return m * n \/ gcd(m, n) ;} int main(void){ int m ;c...

程序设计,两个正整数的最大公约数(Greatest Common Divisou,GCD)是能 ...
具体代码如下:(附有注释)include <stdio.h>#include<stdlib.h>#include<math.h> int Gcd( int a ,int b ); main(){int a,b; \/\/储存两个数int g; \/\/接收最大公约数printf("Input a,b:");scanf("%d,%d",&a,&b);g=Gcd(a,b);\/\/增强程序健壮性if(g==-1)printf("Input...

[C语言]编程:输入两个正整数,求其最大公约数和最小公倍数
include<stdio.h> int main(){ int m, n;int gcd, lcm;scanf("%d%d", &m, &n);gcd = m < n ? m : n;lcm = m > n ? m : n;do { if(m % gcd == 0 && n%gcd==0)break;gcd--;}while(1);do { if(lcm % m == 0 && lcm % n==0)break;lcm++;}while(1)...

C语言程序 设计:用辗转相除法求两个正整数的最大公约数
main(){ int a,b,num1,num2,temp;printf("please input two numbers:\\n");scanf("%d,%d",&num1,&num2);if(num1<num2)\/*交换两个数,使大数放在num1上*\/ { temp=num1;num1=num2;num2=temp;} a=num1;b=num2;while(b!=0)\/*利用辗除法,直到b为0为止*\/ { temp=a%b;a=...

指针作为函数参数,计算两个正整数的最大公约数和最小公倍数
char** argv){ int a,b;int gcd,lcm;\/\/输入 printf("输入两个数,空格隔开:");scanf("%d %d",&a,&b);\/\/计算 compute(a,b,&gcd,&lcm);\/\/输出 printf("%d和%d的最大公约数为:%d,最小公倍数为:%d\\n",a,b,gcd,lcm);} 没什么高级的算法,程序灰常简单,效率灰常低.赚点分!

...实现任意由键盘输入两个正整数,求这两个正整数的最大公约数和...
include <stdio.h> int gcd(int a, int b){ int c;while (b > 0){ c = a % b;a = b;b = c;} return a;} int main(){ int a, b, c;scanf("%d %d", ¥a, ¥b);c = gcd(a, b);printf("最大公约数为%d,最小公倍数为%d。\\n", c, (a * b) \/ c) ;retu...