Pagini recente » Cod sursa (job #1393363) | Cod sursa (job #1127803) | Cod sursa (job #1915697) | Cod sursa (job #272802) | Cod sursa (job #1016102)
#include <cstdio>
#include <cstring>
#define N 1001
#define Base 10000000
using namespace std;
int dp[2][N][N], nr1[N];
void add(int A[], int B[])
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=Base)
A[i] = (t += A[i] + B[i]) % Base;
A[0] = i - 1;
}
int cmmdc(int a, int b)
{
int c;
while (b) {
c = a % b;
a = b;
b = c;
}
return a;
}
int main()
{
freopen("indep.in", "r", stdin);
freopen("indep.out", "w", stdout);
int n, i, j, x, sign=1;
nr1[0]=nr1[1]=1;
scanf("%d", &n);
for(i=1;i<=n;i++, sign=!sign)
{
scanf("%d", &x);
add(dp[sign][x], nr1);
for(j=1;j<N;j++)
{
add(dp[sign][j], dp[!sign][j]);
add(dp[sign][cmmdc(j, x)], dp[!sign][j]);
}
memset(dp[!sign], 0, sizeof(dp[!sign]));
}
sign=n%2;
printf("%d", dp[sign][1][dp[sign][1][0]]);
for(i=dp[sign][1][0]-1;i>0;i--)
{
printf("%d", dp[sign][1][i]);
}
}