代码如下:
#include
int main()
{
int i,a,b,t;
scanf(%d%d,&a,&b);//输入数a,b
if(a>b)//比较a,b大小,如果a>b则交换,结果为a= 2; i--)//以较小的a为基数,每内次i减小1循环求最大公容约数
{
if (a % i == 0 && b % i == 0)//如果两数均能整除某数则该数为最大公约数
{
printf(最大公约数是:%dn,i);
break;//已得到最大公约数后跳出循环
}
}
if(i==1)//若循环到最后仍无最大公约数则i=1
printf(两数只能同时被1整除!n);
return 0;
}
首先要知道什么事最大公约数
最大公约数就是能被两者同时整除的最大数
比如5 25 那么5就是最大公约数
while(m!=0) 是判断m是不等于0的数,因为0不能做为分母的
r=n%m; r就是n%m的余数
n=m 是把m的值赋给n
m=r 是把r的值赋给m
首先,可以给n和m一个值,例如n=30,m=4
那么r=30%4=2,n=4,m=2
由此可以得到,最大公约数是 2
最大公约数即从两个数中较小的那个数开始依次向下找,第一次能同时被那两个数整除的即为最大公约数,如6和9,3就是它俩的最大公约数。
#include <stdioh>
main()
{
int m,n;
int i;
printf("input two numbers:\n");
scanf("%d%d",&m,&n);
if(m>n)
{
i=m;
m=n;
n=i;
}
for(i=m;i>0;i--)
if(m%i==0 && n%i==0)
break;
printf("最大公约数是%d\n",i);
}
#include<stdioh>
#include <conioh>
void main()
{
int m,n,k;
while (1)
{
printf("输入m和n(m>n):");
scanf("%d %d",&m,&n);
if(m<n)
printf("输入错误,请重新输入\n");
else break;
}
while (1)
{
k=m%n;
if(k==0)
break;
m=n;
n=k;
}
printf("m和n的最大公约数是:%d",n);
getch();
}
最大公约数c语言编程的常用思路是:按照从大(两个整数中较小的数)到小(到最小的整数1)的顺序求出第一个能同时整除两个整数的自然数,即为所求。
两个数的最大公约数有可能是其中的小数,所以在按从大到小顺序找寻最大公约数时,循环变量i的初值从小数n开始依次递减,去寻找第一个能同时整除两整数的自然数,并将其输出。
需要注意的是,虽然判定条件是i>0,但在找到第一个满足条件的i值后,循环没必要继续下去,如,25和15,最大公约数是5,对于后面的4、3、2、1没必要再去执行,但此时判定条件仍然成立,要结束循环只能借助break语句。
具体代码实现:
#include<stdioh>
int main()
{
int m,n,temp,i;
printf("Input m&n:");
scanf("%d%d",&m,&n);
if(m<n)/比较大小,使得m中存储大数,n中存储小数/
{/交换m和n的值/
temp=m;
m=n;
n=temp;
}
for(i=n;i>0;i--)/按照从大到小的顺序寻找满足条件的自然数/
if(m%i==0&&n%i==0)
{/输出满足条件的自然数并结束循环/
printf("The GCD of%d and%d is:%d\n",m,n,i);
break;
}
return 0;
}
#include "stdioh"
int gcd(int x,int y)
//欧几里得辗转相除法求两数的最大的公约数
{int m;
if(x<y)
return gcd(y,x);
if(x%y!=0)
return gcd(y,x%y);
else return y;
}
int main()
{int x,y,z;
scanf("%d %d %d",&x,&y,&z);
printf("%d %d %d\n",x,y,gcd(x,y));
printf("%d %d %d\n",y,z,gcd(y,z));
printf("%d %d %d\n",z,x,gcd(x,z));
printf("%d %d %d %d\n",x,y,z,gcd(x,gcd(y,z)));
return 0;
}
以上就是关于c语言求最大公约数全部的内容,包括:c语言求最大公约数、c程序 最大公约数、设计C程序,计算两个数的最大公约数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)