Pagini recente » Cod sursa (job #1876212) | Cod sursa (job #1463108) | Cod sursa (job #1950982) | Cod sursa (job #2973322) | Cod sursa (job #1232754)
#include <fstream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
short N,Array[505];
short DP1[1005][105],DP2[1005][105];
short cmmdc[1005][1005];
void Read()
{
short i;
f>>N;
for(i=1;i<=N;i++)
f>>Array[i];
}
void add(short A[], short B[])
{
short 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;
}
short CMMDC(short a,short b)
{
short rest=a%b;
while(rest!=0)
{
a=b;
b=rest;
rest=a%b;
}
return b;
}
void precalcCMMDC()
{
int i,j;
for(i=1;i<=1000;i++)
for(j=1;j<=1000;j++)
if(cmmdc[i][j]==0)
cmmdc[i][j]=cmmdc[j][i]=CMMDC(i,j);
}
void solveDinamic()
{
short i,j;
DP1[Array[1]][0]=1;
DP1[Array[1]][1]=1;
for(i=2;i<=N;i++)
{
for(int l=1;l<=1000;l++)
{
for(int k=1;k<=DP2[l][0];k++)
DP2[l][k]=0;
DP2[l][0]=1;
}
DP2[Array[i]][1]=1;
for(j=1;j<=1000;j++)
{
add(DP2[j],DP1[j]);
add(DP2[cmmdc[Array[i]][j]],DP1[j]);
}
for(int l=1;l<=1000;l++)
{
DP1[l][0]=DP2[l][0];
for(int k=1;k<=DP2[l][0];k++)
DP1[l][k]=DP2[l][k];
}
}
}
void Print()
{
short i;
for(short i=DP1[1][0];i>=1;i--)
g<<DP1[1][i];
}
int main()
{
Read();
precalcCMMDC();
solveDinamic();
Print();
return 0;
}