B - Fox and Number Game
Fox Ciel is playing a game with numbers now.
Ciel has n positive integers: x1, x2, ..., xn. She can do the following operation as many times as needed: select two different indexes i and jsuch that xi > xj hold, and then apply assignment xi = xi - xj. The goal is to make the sum of all numbers as small as possible.
Please help Ciel to find this minimal sum.
Input
The first line contains an integer n (2 ≤ n ≤ 100). Then the second line contains n integers: x1, x2, ..., xn (1 ≤ xi ≤ 100).
Output
Output a single integer — the required minimal sum.
Examples
Input
2 1 2
Output
2
/*
可以看出该题就是求所给的所有数的最大公约数,然后*n
最大公约数*n或优先队列处理最大值或最小值。
*/
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <math.h>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)//递归求最大公约数
{
if (b==0) return a;
else return gcd(b,a%b);
}
int main()
{
int i,n,ans,a[105];
while (cin>>n)
{
cin>>a[0];
ans=a[0];//先输入第一个整数,默认其为最大公约数
for (i=1;i<n;i++)//从第二个整数开始每输入一个数,将它与现最大公约数进行求最大公约数
{
cin>>a[i];
ans=gcd(ans,a[i]);
}
cout<<ans*n<<endl;
}
return 0;
}