Pagini recente » Cod sursa (job #2103032) | Cod sursa (job #1000932) | Cod sursa (job #1818203) | Cod sursa (job #2971185) | Cod sursa (job #2631709)
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 10007
#define INF 2100000000
using namespace std;
const int NMAX = 505;
int N;
int v[NMAX];
int dp[2 * NMAX][3 * NMAX];
inline int gcd(int x, int y){
if(!y)
return x;
return gcd(y, x % y);
}
inline void sum(int a, int b){
int nr, c = 0;
for(int i = 1; i <= max(dp[a][0], dp[b][0]); ++i){
nr = c + dp[a][i] + dp[b][i];
c = nr / 10;
dp[a][i] = nr % 10;
}
dp[a][0] = max(dp[a][0], dp[b][0]);
while(c){
dp[a][++dp[a][0]] = c % 10;
c /= 10;
}
}
int main(){
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
scanf("%d", &N);
for(int i = 1; i <= N; ++i)
scanf("%d", &v[i]);
dp[0][0] = dp[0][1] = 1;
dp[1][0] = 1;
for(int i = 1; i <= N; ++i){
for(int j = 1; j <= 1000; ++j){
if(!dp[j][0]) continue;
sum(gcd(v[i], j), j);
}
sum(v[i], 0);
}
for(int i = dp[1][0]; i > 0; --i)
printf("%d", dp[1][i]);
return 0;
}