辗转相除法原理到处都有解释,什么余数,除数,概念混乱,什么算法完全看不懂,真理解不来,记住方法就能解决最大公约数了,其他的方法并不是不行,而是难以过一些测试点刁钻和有时间限制的题目,什么暴力求,那些代码行数多且不好过平台,求最大公约数还是得看辗转相除法。
辗转相除法-先输入两个数,输入a,b两个值。a,b无大小分,(求余都一样),用a对b求余,将b赋给a,再将余数赋给b,再用a对b求余,重复步骤,直到最后余数是0为止。那么最后的a就是这两个数的最大公约数。
#include<stdio.h>
int main()
{
int a,b,t;
scanf("%d %d",&a,&b);
while(b!=0)
{
t=a%b;
a=b;
b=t;
}
printf("%d",a);
return 0;
}
e.1赋给a=15,b=3,第一次循环:t=0,a=3,b=0,结束循环,最大公约数3。
e.2赋给a=15,b=12,第一次循环:t=3,a=12,b=3;第二次循环:t=0,a=3,b=0;结束循环,最大公约数3。
e.3赋给a=15,b=15,第一次循环:t=0,a=15,b=0;结束循环,最大公约数15。
e.4赋给a=12,b=15,第一次循环:t=3,a=15,b=3;第二次循环:t=0,a=3,b=0;结束循环,最大公约数3。
这里可以直接用递归函数用于多次需要求余的情况。
#include<stdio.h>
int main()
{
int x,y;
scanf("%d %d",&x,&y);//输入两个要求的值
int gcd(int ,int );//定义求最小公倍数函数
printf("%d",gcd(x,y));//输出最大公约数
return 0;
}
int gcd(int a,int b)
{
if(b==0)
return a;//返回最大公约数
else