Pagini recente » Cod sursa (job #1029260) | Cod sursa (job #112582) | Cod sursa (job #1479858) | Cod sursa (job #952475) | Cod sursa (job #2710837)
#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][700];
void aduna(int A[], int B[]) {
int i, t = 0;
for(i = 1; i <= A[0] || i <= B[0] || t; ++i, t /= 1000)
A[i] = (t += A[i] + B[i]) % 1000;
A[0] = i - 1;
}
int main(){
fin >> n;
for (int i = 1; i <= n; ++i){
fin >> v[i];
}
int t = 0;
dp[1 - t][1][0] = dp[1 - t][1][1] = 1;
for (int i = 0; i <= 1000; ++i){
dp[0][i][0] = dp[1][i][0] = 1;
}
for (int i = n; i >= 1; --i){
for (int j = 0; j <= 1000; ++j){
for (int k = dp[1 - t][j][0]; k >= 0; --k){
dp[t][j][k] = dp[1 - t][j][k];
}
aduna(dp[t][j], dp[1 - t][__gcd(j, v[i])]);
}
t = 1 - t;
}
t = 1 - t;
for (int i = dp[t][0][0]; i >= 1; --i){
if (i != dp[t][0][0]){
if (dp[t][0][i] <= 9){
fout << 00;
}
else if (dp[t][0][i] <= 99){
fout << 0;
}
}
fout << dp[t][0][i];
}
fin.close();
fout.close();
return 0;
}