Pagini recente » Cod sursa (job #1697778) | Cod sursa (job #1022477) | Cod sursa (job #1426674) | Cod sursa (job #996163) | Cod sursa (job #2641626)
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 1000;
long long prev_dp[MAX + 5], crt_dp[MAX + 5];
int cmmdc(int a, int b) {
int r = 0;
while(b) {
r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int n, x;
scanf("%d", &n);
prev_dp[0] = crt_dp[0] = 1;
for(int i = 1; i <= n; i++) {
scanf("%d", &x);
for(int i = 0; i <= MAX; i++) {
int aux = cmmdc(x, i);
crt_dp[aux] += prev_dp[i]; /// adaug x la toate subsirurile cu cmmdc-ul i
}
for(int i = 0; i <= MAX; i++)
prev_dp[i] = crt_dp[i];
}
printf("%lld", prev_dp[1]);
return 0;
}