Cod sursa(job #1771401)

Utilizator borcanirobertBorcani Robert borcanirobert Data 5 octombrie 2016 16:40:56
Problema Indep Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

ifstream fin("indep.in");
ofstream fout("indep.out");

const int MAXN = 510;
const int MAXNR = 1005;
int N;
int a[MAXN];
int D[MAXNR];
int maxim;

void Read();
void Solve();
int Cmmdc( int a, int b );

int main()
{
    Read();
    Solve();

    fout << D[1] << '\n';

    fin.close();
    fout.close();
    return 0;
}

void Read()
{
    int i;

    fin >> N;
    for ( i = 1; i <= N; i++ )
    {
        fin >> a[i];
        maxim = max(maxim, a[i]);
    }
}

void Solve()
{
    int i, j;

    for ( i = 1; i <= N; i++ )
    {
        for ( j = 1; j <= maxim; j++ )
            if ( D[j] > 0 )
                D[Cmmdc(j, a[i])] += D[j];

        D[a[i]]++;
    }
}

int Cmmdc( int a, int b )
{
    int rest;

    do
    {
        rest = a % b;
        a = b;
        b = rest;
    } while ( rest != 0 );

    return a;
}