Cod sursa(job #1903283)

Utilizator mihai.alphamihai craciun mihai.alpha Data 5 martie 2017 08:59:00
Problema Indep Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <iomanip>

using namespace std;

ifstream f("indep.in");
ofstream g("indep.out");

#define MAX_N 500
#define CONST 1000

int N;

inline int gcd(int a, int b)  {
    int r;
    while(b)  {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}

struct Number  {
    static const int Base = 10000;
    static const int NR = 101;
    int a[NR] = {0};
    int ind = 1;
    inline void add(Number b)  {
        int i, rest = 0;
        for(i = 1;i <= a[0] || i <= b.a[0] || rest > 0;i++)
            a[i] = (a[i] + b.a[i] + rest), rest = a[i] / Base, a[i] %= Base;
        a[0] = i - 1;
    }
    inline void print()  {
        g << a[a[0]] << setprecision(4) << fixed;
        for(int i = a[0] - 1;i > 0;i--)
            g << a[i];
    }
};

Number dp[CONST + 1], one;


int main()  {
    f >> N;
    int v;
    one.a[0] = 1, one.a[1] = 1;
    for(int i = 1;i <= N;i++)  {
        f >> v;
        for(int j = 1;j <= CONST;j++)  {
        dp[gcd(j, v)].add(dp[j]);
        }
        dp[v].add(one);
    }
    dp[1].print();
    f.close();
    g.close();
    return 0;
}