辗转相除法可以求两个数的最大公因数
该函数通常用gcd来表示
我们用递归的方法来求出最大公因数
方法分析: gcd(a,b),a=b*p+q, 则b和q的最大公因数一定是b*p+q和b的最大公因数,即gcd(a,b)=gcd(b,a%b),不断这样操作下去,由于gcd的第二个参数会不断减小的,最终会得到gcd(a,b)=gcd(c,0),所以gcd(c,0)=c,这样就计算出了gcd(a,b)。
上代码
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
用辗转相除法求线段上格点的个数
#include<iostream>
#include<cmath>
using namespace std;
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
int x1,y1,x2,y2;
while(cin>>x1>>y1>>x2>>y2)
{
int a=abs(x1-x2);
int b=abs(y1-y2);
int ans=gcd(a,b)-1;
cout<<ans<<endl;
}
}