Cod sursa(job #1308833)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 4 ianuarie 2015 18:37:57
Problema Indep Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <fstream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

ifstream is("indep.in");
ofstream os("indep.out");

int N, D[2][1001][200];
int Line, x;

int X[] = {1,1};

void Add(int A[], int B[])
{
    int i, t = 0;
    for (i = 1; i <= A[0] || i <= B[0] || t; i++, t /= 1000000000)
        A[i] = (t += A[i] + B[i]) % 1000000000;
    A[0] = i - 1;
}

int main()
{
    is >> N; Line = 1;
    freopen("indep.out","w",stdout);

    for ( int i = 1; i <= N; ++i, Line = 1 - Line )
    {
        is >> x;
        Add(D[Line][x], X);
        for ( int j = 1; j <= 1000; ++j )
        {
            Add(D[Line][__gcd(j,x)], D[1-Line][j]);
            Add(D[Line][j], D[1-Line][j]);
        }
        memset(D[1-Line], 0, sizeof(D[1-Line]));
    }
    printf("%d",D[1-Line][1][D[1-Line][1][0]]);
    for ( int i = D[1-Line][1][0]-1; i > 0; --i )
        printf("%.9d", D[1-Line][1][i]);

    is.close();
    os.close();
}