Cod sursa(job #752548)

Utilizator DumitracheIulianDumitrache Iulian DumitracheIulian Data 28 mai 2012 21:09:18
Problema Indep Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in ("indep.in");
ofstream out("indep.out");
int const N=505;
int const M=1005;
int v[N],d[2][M][100];
int n;

void citire ()
{
    in>>n;
    for(int i=1;i<=n;i++)
        in>>v[i];
}
void init (int i, int j)
{
    for(int aux=0;aux<100;aux++)
        d[i%2][j][aux]=d[(i-1)%2][j][aux];
}
int cmmdc (int x, int y)
{
    int a=x, b=y, r;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
void adunare (int i,int c,int j)
{
    int zeci=0;
    for(int aux=0;aux<100;aux++)
    {
        int temp=d[i%2][c][aux]+d[(i-1)%2][j][aux]+zeci;
        d[i%2][c][aux]=(temp)%10;
        zeci=temp/10;
    }
}
void complet ()
{
    d[0][0][0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=1000;j++)
            init(i,j);
        for(int j=0;j<=1000;j++)
        {
            int c=cmmdc(j,v[i]);
            adunare(i,c,j);
        }
    }
}
void afis ()
{
    int aux=99;
    while((d[n%2][1][aux]==0)&&(aux>0))
        aux--;
    while(aux>=0)
    {
        out<<d[n%2][1][aux];
        aux--;
    }
    out<<"\n";
}
int main()
{
    citire();
    complet();
    afis();
    return 0;
}