Pagini recente » Cod sursa (job #1382750) | Cod sursa (job #2413854) | Cod sursa (job #1605333) | Cod sursa (job #3292726) | Cod sursa (job #1016093)
#include <fstream>
#include <cstring>
#define N 1001
using namespace std;
ifstream fin("indep.in");
ofstream fout("indep.out");
int a[N], dp[2][N][200], nr1[N];
void add(int A[], int B[])
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
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()
{
int n, i, j, x, sign=1;
nr1[0]=nr1[1]=1;
fin>>n;
for(i=1;i<=n;i++, sign=!sign)
{
fin>>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;
for(i=dp[sign][1][0];i>0;i--)
{
fout<<dp[sign][1][i];
}
}