Pagini recente » Cod sursa (job #2656621) | Cod sursa (job #2211915) | Cod sursa (job #1673140) | Cod sursa (job #720023) | Cod sursa (job #1345662)
#include <fstream>
using namespace std;
ifstream f("indep.in");
ofstream g("indep.out");
int n,a[505],y,i,j,i1,i2;
int cmmdc(int x,int y)
{
int r;
do
{
r=x%y;
x=y;
y=r;
}
while(r);
return x;
}
struct numar{int c[200];};
numar d[2][1001];
void adunare(numar a,numar b,numar &c)
{
int i,t=0;
for (i=1;i<=a.c[0] || i<=b.c[0] || t;i++,t=t/1000000000)
c.c[i]=(t+=a.c[i]+b.c[i])%1000000000;
c.c[0]=i-1;
}
int main()
{
f>>n;
for (i=1;i<=n;i++)
f>>a[i];
i1=0,i2=1;
d[i1][a[1]].c[1]=1;
d[i1][a[1]].c[0]=1;
for (i=2;i<=n;i++)
{
for (j=1;j<=1000;j++)
d[i2][j]=d[i1][j];
for (j=1;j<=1000;j++)
{
y=cmmdc(a[i],j);
adunare(d[i2][y],d[i1][j],d[i2][y]);
}
i2=1-i2,i1=1-i1;
}
for (i=d[i1][1].c[0];i>=1;i--)
g<<d[i1][1].c[i];
return 0;
}