Pagini recente » Cod sursa (job #2586890) | Cod sursa (job #559746) | Cod sursa (job #2970897) | Cod sursa (job #2747643) | Cod sursa (job #3154725)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
long long euclid(long long a, long long b){
if (b == 0)
return a;
long long rezultat = euclid(b, a % b);
return rezultat;
}
void add(int A[], int B[]){
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
int main(){
int lungime;
int max_nr[501] = {0};
int v[1001] = {0};
int dp[2][1001][1001] = {0};
cin >> lungime;
for (int i = 1; i <= lungime; i++){
cin >> v[i];
max_nr[i] = max(max_nr[i - 1], v[i]);
}
for (int i = 1; i <= lungime; i++){
int curr_i = i % 2;
for (int j = 0; j <= max_nr[i]; j++){
for (int k = 1; k <= dp[curr_i][j][0]; k++)
dp[curr_i][j][k] = 0;
dp[curr_i][j][0] = 1;
}
int last_i = (i - 1) % 2;
for (int j = 1; j <= max_nr[i]; j++){
int k = euclid(v[i], j);
add(dp[curr_i][j], dp[last_i][j]);
add(dp[curr_i][k], dp[last_i][j]);
if (j == v[i]){
int mat[1001] = {0};
mat[0] = 1;
mat[1] = 1;
add(dp[curr_i][j], mat);
}
}
}
for (int i = 1; i <= dp[lungime % 2][1][0]; i++){
cout << dp[lungime % 2][1][i];
}
return 0;
}