一、朴素递归算法
int zuidagongyueshu(int m, int n) { if (n == 0) { return m; } return zuidagongyueshu(n, m % n); }
二、迭代算法
int zuidagongyueshu2(int m, int n) { while (n!=0) { int tmp=m%n; m=n; n=tmp; } return m; }
三、扩展欧式算法
void exEuclid(int a, int b, int&x, int&y) { if (b==0) { if (a!=1) { puts("Mei you jie la QwQ"); } x=1; y=0; return; }//据说不停的算b总会有一天到0 int k=a/b,c=a%b; exEuclid(b,c,x,y); int xp=x,yp=y; x=yp; y=xp-k*yp; } /* 类比辗转相除法 不停地迭代 a = kb + d (kb + d)x + by = c b(kx + y) + dx = c */
时间: 2024-10-06 00:29:04