Cod sursa(job #1345662)

Utilizator Darius15Darius Pop Darius15 Data 17 februarie 2015 19:46:58
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#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;
}