Pagini recente » Cod sursa (job #2053715) | Cod sursa (job #1232191) | Cod sursa (job #1190965) | Cod sursa (job #2700420) | Cod sursa (job #3189948)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
const int LMAX = 505;
int dp[LMAX][2*LMAX], a[LMAX];
//dp[i][j] nr de subsecvente cu primele i elemenete care au cmmdc j
int cmmdc(int a, int b) {
int r;
while (b) {
r = a%b;
a = b;
b = r;
}
return a;
}
int main() {
int n, i, j, ap1;
fin>>n;
ap1 = 0;
for (i = 1; i <= n; i++) {
fin>>a[i];
if (a[i] == 1) ap1++;
for (j = 1; j <= 1000; j++) {
///nu adaugam al i ulea element
dp[i][j]+=dp[i-1][j];
///adaugam al i ulea element
dp[i][cmmdc(a[i], j)]+=dp[i-1][j]; ///pt ca la fiecare subsecv de cmmdc j fac cmmdc cu a[i]
}
///fac o noua secv cu a[i]
dp[i][a[i]]++;
}
fout<<dp[n][1] - ap1;
fin.close();
fout.close();
return 0;
}