- 分享
欧几里得算法(辗转相除法)
- @ 2026-7-19 20:55:46
#include<bits/stdc++.h>
using namespace std;
/*
欧几里得算法(辗转相除法)
求出两个数字的最大公约数
gcd(a, b) = gcd(b, a%b);
通过这样的一个公式,不断的缩小 a 和 b 的值
直到 b == 0,此时的 a 就是最大公约数
gcd(14, 36)
= gcd(36, 14);
= gcd(14, 8);
= gcd(8, 6);
= gcd(6, 2);
= gcd(2, 0);
求最小公倍数:
lcm = a * b / gcd(a,b);
*/
int gcd(int a,int b){
if(b == 0) return a;
else return gcd(b,a%b);
}
int main(){
int a, b;
cin >> a >> b;
while(b != 0){
// a,b -->> b,a%b
int t = a%b;
a = b;
b = t;
}
cout << gcd(a,b);
return 0;
}
16 条评论
-
刘怀远 Lv.破阵 @ 2026-7-23 21:01:37小恐龙
-
@ 2026-7-20 11:06:23

-
@ 2026-7-19 21:01:27#include<bits/stdc++.h> using namespace std; int gcd(int a,int b){ if(b==0)return a; else return gcd(b,a%b); } int main(){ int a,b; cin>>a>>b; while(b!=0){ int t=a%b; a=b; b=t; } cout<<gcd(a,b); return 0; }李懋
-
@ 2026-7-19 21:01:20
#include<bits/stdc++.h> using namespace std; int gcd(int a, int b){ if(b == 0) return a; else return gcd(b,a%b); } int main(){ int a, b; cin >> a >> b; while(b != 0){ int t = a%b; a = b; b = t; } cout << gcd(a, b); return 0; }
-
@ 2026-7-19 21:00:37#include<bits/stdc++.h> using namespace std; int pry(int a,int b){ if(b == 0){ return a; }else{ return pry(b,a%b); } } int main(){ int a, b; cin >> a >> b; while(b != 0){ int t = a%b; a = b; b = t; } cout << pry(a,b); return 0; }👎 1 -
@ 2026-7-19 21:00:23#include<bits/stdc++.h> using namespace std; int gcd(int a,int b){ if(b == 0) return a; else return gcd(b,a%b); }
int main(){
int a, b; cin >> a >> b; while(b != 0){ int t = a%b; a = b; b = t; } cout << gcd(a,b); return 0;}
👎 1 -
@ 2026-7-19 21:00:07
#include<bits/stdc++.h> using namespace std; int gcd(int a, int b) { if(b != 0) { gcd(b, a % b); } else { return a; } } int lcm(int a, int b) { return a * b / gcd(a, b); } int main() { int a, b; cin >> a >> b; cout << gcd(a, b) << ' ' << lcm(a, b); return 0; }
👎 1 -
@ 2026-7-19 20:59:43#include<bits/stdc++.h> using namespace std; int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b); } int main(){ int a,b; cin>>a>>b; while(b!=0){ int t=a%b; a=b; b=t; } cout<<gcd(a,b); }👎 1 -
@ 2026-7-19 20:58:37
#include<bits/stdc++.h> using namespace std; int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b); } int main(){ int a,b; cin>>a>>b; while(b != 0){ int t = a%b; a=b; b=t; } cout<<gcd(a,b); }👎 1 -
@ 2026-7-19 20:58:19#include<bits/stdc++.h> using namespace std; int gcd(int a,int b){ if(b == 0) return a; else return gcd(b,a%b); } int main(){ int a, b; cin >> a >> b; while(b != 0){ int t = a%b; a = b; b = t; } cout << gcd(a,b); return 0; }
👎 1 -
@ 2026-7-19 20:57:30#include<bits/stdc++.h> using namespace std; int gcd(int a, int b) { if(b > 0) { return gcd(b, a % b); } else { return a; } } int lcm(int a, int b) { return a * b / gcd(a, b); } int main() { int a, b; cin >> a >> b; cout << gcd(a, b) << ' ' << lcm(a, b); return 0; }👎 1 -
@ 2026-7-19 20:56:43#include <bits/stdc++.h> using namespace std;
int f(int a, int b) { while (b != 0) { int temp = a % b; a = b; b = temp; } return a; }
int main() { int m, n; cin >> m >> n; cout << f(m, n) << endl; return 0; }
👎 1 -
@ 2026-7-19 20:56:27#include<bits/stdc++.h> using namespace std;
gcd(14, 36) = gcd(36, 14); = gcd(14, 8); = gcd(8, 6); = gcd(6, 2); = gcd(2, 0); lcm = a * b / gcd(a,b);int gcd(int a,int b){ if(b == 0) return a; else return gcd(b,a%b); }
int main(){
int a, b; cin >> a >> b; while(b != 0){ // a,b -->> b,a%b int t = a%b; a = b; b = t; } cout << gcd(a,b); return 0;}
👎 1 -
@ 2026-7-19 20:56:22#include<bits/stdc++.h> using namespace std; int gcd(int a, int b) { if(b > 0) { gcd(b, a % b); } else { return a; } } int lcm(int a, int b) { return a * b / gcd(a, b); } int main() { int a, b; cin >> a >> b; cout << gcd(a, b) << ' ' << lcm(a, b); return 0; }👎 1 -
@ 2026-7-19 20:56:22
#include<iostream> using namespace std; int gcd(int a,int b) { if(b==0)return a; return gcd(b,a%b); } int main() { int a,b; cin >> a >> b; cout << gcd(a,b); return 0; } -
@ 2026-7-19 20:56:03一楼
- 1