Pagini recente » Cod sursa (job #1610444) | Cod sursa (job #168278) | Cod sursa (job #2334289) | Cod sursa (job #2290459) | Cod sursa (job #3154708)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("indep.in");
ofstream cout("indep.out");
short euclid(short a, short b){
if (b == 0)
return a;
short rezultat = euclid(b, a % b);
return rezultat;
}
short cmmdc[1001][1001] = {0};
int main(){
for (int i = 1; i <= 1000; i++){
for (int j = 1; j <= 1000; j++){
if (cmmdc[i][j] != 0){
continue;
} else {
cmmdc[i][j] = euclid(i, j);
cmmdc[j][i] = cmmdc[i][j];
}
}
}
short lungime;
short max_nr[501] = {0};
short v[1001] = {0};
int dp[501][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 (short i = 1; i <= lungime; i++){
for (short j = 1; j <= max_nr[i]; j++){
dp[i][j] += dp[i-1][j];
if (j == v[i])
dp[i][j] += 1;
else {
for (short k = 1; k <= max_nr[i]; k++) {
if (cmmdc[k][v[i]] == j) {
dp[i][j] += dp[i - 1][k];
}
}
}
}
}
cout << dp[lungime][1];
return 0;
}