Pagini recente » Profil jewelstudio | Cod sursa (job #1913024) | Cod sursa (job #975243)
Cod sursa(job #975243)
#include <fstream>
#include <cstring>
#include <iomanip>
#define NM 510
#define VM 1010
#define CM 50
#define BASE 100000
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
inline int cmmdc (int a, int b)
{
int r;
while (b)
{
r=a%b;
a=b;
b=r;
}
return a;
}
int N, i, j, MAXV;
int A[NM];
int DP[2][VM][CM];
int One[CM];
void Add (int A[CM], int B[CM])
{
A[0]=max(A[0], B[0]);
int i, T=0;
for (i=1; i<=A[0]; i++)
{
T+=A[i]+B[i];
A[i]=T%BASE;
T/=BASE;
}
for (; T>0; T/=BASE)
A[++A[0]]=T%BASE;
}
void Print (int A[CM])
{
g << A[A[0]];
for (int i=A[0]-1; i>=1; i--)
g << setfill('0') << setw(5) << A[i];
g << '\n';
}
int main ()
{
f >> N;
for (i=1; i<=N; i++)
{
f >> A[i];
MAXV=max(MAXV, A[i]);
}
One[0]=One[1]=1;
for (i=1; i<=N; i++)
{
int C=i%2, P=1-C;
memset(DP[C], 0, sizeof(DP[C]));
Add(DP[C][A[i]], One);
for (j=1; j<=MAXV; j++)
{
Add(DP[C][j], DP[P][j]);
Add(DP[C][cmmdc(A[i], j)], DP[P][j]);
}
}
Print(DP[N%2][1]);
f.close();
g.close();
return 0;
}