哈工大机试 最大公约数 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;
}

  

猜你喜欢

转载自www.cnblogs.com/songlinxuan/p/12408297.html
今日推荐