Pagini recente » Cod sursa (job #3285123) | Cod sursa (job #519782) | Cod sursa (job #76788) | Cod sursa (job #1268294) | Cod sursa (job #2631706)
#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][2 * NMAX];
inline int gcd(int x, int y){
if(!y)
return x;
return gcd(y, x % y);
}
inline void sum(int a, int b){
for(int i = 1; i <= dp[b][0]; i++)
dp[a][i] += dp[b][i];
dp[a][0] = max(dp[a][0], dp[b][0]);
for(int i = 1; i <= dp[a][0] + 5; i++){
if(dp[a][i]) dp[a][0] = i;
dp[a][i + 1] += dp[a][i] / 10;
dp[a][i] %= 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;
}