Pagini recente » Cod sursa (job #672535) | Cod sursa (job #178289) | Cod sursa (job #1023078) | Cod sursa (job #753477) | Cod sursa (job #2710807)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int nmax = 505;
int n, v[nmax], dp[2][1005][505];
void aduna(int *a, int *b){
int t = 0;
for (int i = 1; i <= max(a[0], b[0]); ++i){
if (i > a[0]) a[i] = 0;
if (i > b[0]) b[i] = 0;
a[i] = a[i] + b[i] + t;
t = a[i] / 10;
a[i] %= 10;
}
a[0] = max(a[0], b[0]);
if (t){
a[++a[0]] = 1;
}
}
int main(){
fin >> n;
for (int i = 1; i <= n; ++i){
fin >> v[i];
}
dp[(n + 1) % 2][1][0] = dp[(n + 1) % 2][1][1] = 1;
for (int i = n; i >= 1; --i){
memset(dp[i % 2], 0, sizeof(dp[i % 2]));
for (int j = 0; j <= 1000; ++j){
aduna(dp[i % 2][j], dp[(i + 1) % 2][j]);
aduna(dp[i % 2][j], dp[(i + 1) % 2][__gcd(j, v[i])]);
}
}
for (int i = dp[1][0][0]; i >= 1; --i){
fout << dp[1][0][i];
}
fin.close();
fout.close();
return 0;
}