基本思想:
主流使用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; }