哈工大机试 最大公约数 Easy *注意一下最大公约数的GCD辗转相除解法,复习
基本思想:
主流使用gcd辗转相除,主流方法;
自己当时忘了直接用set去重;
关键点:
复习;
去重版本:
#include<stdio.h> #include<stdlib.h> #include<iostream> #include<string> #include<vector> #include<algorithm> #include<map> #include<set> using namespace std; int m, n; void charge() { int minys = 1; set<int>ys; for (int i = 1; i <= sqrt(m); i++) { if (m%i == 0) { ys.insert(i); ys.insert(m / i); } } for (int i = 1; i <= sqrt(n); i++) { if (n % i == 0) { if (ys.find(n / i)!=ys.end() && minys < n / i) minys = n / i; else if (ys.find(i) != ys.end() && minys < i) minys = i; } } cout << minys << endl; } int main() { string s; while (cin >> m >> n) { charge(); } return 0; }
gcd版本:
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
int m, n;
void charge(int a,int b) {
if (b == 0) {
cout << a << endl;
return;
}
charge(b, a%b);
}
int main() {
string s;
while (cin >> m >> n) {
if (m > n)
charge(m, n);
else
charge(n, m);
}
return 0;
}

浙公网安备 33010602011771号