Cod sursa(job #754953)

Utilizator DumitracheIulianDumitrache Iulian DumitracheIulian Data 4 iunie 2012 11:24:39
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <cstdio>
using namespace std;

ifstream in ("indep.in");
ofstream out("indep.out");
int const N=505;
int const M=1005;
const int B = 1000000000;
int n,v,maxi,num[M][202];

inline int cmmdc(int a, int b)
{
    if (b == 0) return a;
    return cmmdc(b, a % b);
}
void add (int pos1, int pos2)
{
    int i,t=0;
    for(i=1;i<=num[pos1][0] || i<=num[pos2][0] || t; i++, t/=B)
        num[pos1][i]=(t+=num[pos1][i]+num[pos2][i])%B;
    num[pos1][0]=i-1;
}
int main()
{
    FILE *out = fopen("indep.out","w");
    num[0][0] = num[0][1] = 1;
    in>>n;
    for (int i=1;i<=n;++i)
    {
        in>>v;
        if(v>maxi)  maxi=v;
        for (int j=1;j<=maxi;++j)
            add(cmmdc(v,j),j);   //num[cmmdc(V[i],j)]+=num[j];
        add(v,0);    //num[V[i]]+=num[0];
    }
    if (num[1][0] == 0) num[1][0] = 1;
    fprintf(out,"%d",num[1][num[1][0]]);
    for(int i=num[1][0]-1;i>=1;--i)
        fprintf(out,"%09d",num[1][i]);
    fclose(out);
    in.close();
    return 0;
}