JOI2006年模擬試験1 問題2@C++(87)

#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

int gcm(int a,int b)
{
	int tmp;
	while(b) {
		tmp=a%b;
		a=b;
		b=tmp;
	}
	return a;
}

int main(int argc,char* argv[])
{
	int n;
	scanf("%d\n",&n);
	int max;
	if(n==2) {
		int a,b;
		scanf("%d %d\n",&a,&b);
		max=gcm(a,b);
	} else {
		int a,b,c;
		scanf("%d %d %d\n",&a,&b,&c);
		max=gcm(gcm(a,b),c);
	}
	vector<int> reverses;
	for(int i=1;i*i<=max;i++) {
		if(max%i==0) {
			printf("%d\n",i);
			if(i!=max/i)reverses.push_back(max/i);
		}
	}
	for(vector<int>::reverse_iterator i=reverses.rbegin();i!=reverses.rend();i++) {
		printf("%d\n",*i);
	}
	return 0;
}