Pagini recente » Arhiva de probleme | Cod sursa (job #1272389) | Arhiva de probleme | Cod sursa (job #1973040) | Cod sursa (job #347506)
Cod sursa(job #347506)
#include <cstdio>
#include <algorithm>
using namespace std;
#define FIN "indep.in"
#define FOUT "indep.out"
#define N 505
#define M 1005
int n , a[N], d[N][M];//[M];
int gcd(int i, int j)
{
if (!i || !j)
return i ? i : j;
return gcd(max(i, j) % min(i, j), min(i, j));
}
int main()
{
int i, j;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
scanf("%d", &a[i]);
for (i = 1; i <= n; ++ i)
d[i][a[i]] = 1;
for (i = 1; i < n; ++ i)
for (j = 1; j <= 1000; ++ j)
{
d[i + 1][gcd(j, a[i + 1])] += d[i][j];
d[i + 1][j] += d[i][j];
}
printf("%d\n", d[n][1]);
}