Cod sursa(job #1514660)

Utilizator Vlad_317Vlad Panait Vlad_317 Data 31 octombrie 2015 13:26:25
Problema Indep Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>

using namespace std;

const int MAX = 1000;

long long d[501][1001];
int v[501];
/// d[i][j] = numarul de siruri pe care le poti face cu primele I elemente cu cmmdcul J

long long cmmdc(int a, int b)
{
    int r = a % b;
    while(r != 0)
    {
        a=b;
        b=r;
        r = a % b;
    }
    return b;
}

int main()
{
    FILE *fin, *fout;

    fin = fopen("indep.in", "r");
    fout = fopen("indep.out", "w");

    int n;

    fscanf(fin,"%d",&n);

    for(int i=1; i<=n; i++)
    {
        fscanf(fin,"%d",&v[i]);
    }

    d[1][v[1]]=1;

    for(int i=2; i<=n; i++)
    {

        for(int j=1;j<=MAX;j++)
        {
            d[i][cmmdc(v[i],j)] += d[i-1][j];
        }
        for(int j=1; j<=MAX; j++)
        {
            d[i][j]+=d[i-1][j];
        }
        d[i][v[i]]++;
    }

    /// for de la 1 la MAX in care d[i][cmmdc(v[i],j)] = d[i-1][j];

    //fprintf(fout,"%d\n%d\n", cmmdc(3, 4), cmmdc(543410, 340));


    fprintf(fout,"%lld",d[n][1]);

    return 0;
}