Pagini recente » Cod sursa (job #100004) | Cod sursa (job #3193321) | Cod sursa (job #1928551) | Cod sursa (job #751859) | Cod sursa (job #2310585)
#include <bits/stdc++.h>
#define maxV 1001
#define ll long long
FILE *fin = freopen("indep.in", "r", stdin);
FILE *fout = freopen("indep.out", "w", stdout);
int gcd(int x, int y)
{
int r = x % y;
while (r)
{
x = y;
y = r;
r = x % y;
}
return y;
}
int main()
{
int n, *v;
scanf("%d", &n);
v = new int[n + 1];
for (int i = 0; i < n; ++ i)
scanf("%d", &v[i]);
ll dp[2][maxV];
memset(dp, 0, sizeof(dp));
dp[0][v[0]] = 1;
for (int i = 1, t = 1; i < n; ++ i, t = !t)
{
memset(dp[t], 0, sizeof(dp[t]));
for (int d1 = 1; d1 < maxV; ++ d1)
{
int d2 = gcd(d1, v[i]);
dp[t][d2] += dp[!t][d1]; /// d2 <= d1
dp[t][d1] += dp[!t][d1];
}
++ dp[t][v[i]];
}
printf("%lld\n", dp[!(n & 1)][1]);
return 0;
}