Cod sursa(job #2469221)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 6 octombrie 2019 16:58:04
Problema Indep Scor 85
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <iostream>
#include <fstream>

using namespace std;

struct bigbrain{
    int digi[214];
    bool zero = true;
    bigbrain(){
        for(int i = 0; i <= 200; i++){
            digi[i] = 0;
        }
    }
    bigbrain(int a) : digi(){
        for(int i = 0; i <= 200 && a > 0; i++){
            digi[i] = a%10;
            a /= 10;
        }
    }
    void write(ostream & out){
        bool yes = false;
        for(int i = 200; i >= 0; i--){
            if(digi[i] != 0){
                yes = true;
            }
            if(yes){
                out << digi[i];
            }
        }
        if(!yes){
            out << 0;
        }
        out << "\n";
    }
    void add(bigbrain rhs){
        int r = 0;
        for(int i = 0; i <= 200; i++){
            digi[i] += rhs.digi[i] + r;
            r = digi[i] / 10;
            digi[i] %= 10;
        }
        zero = false;
    }
    // void add(int rhs){
    //     int r = 0;
    //     for(int i = 0; i <= 200 && rhs > 0; i++){
    //         digi[i] += rhs%10 + r;
    //         rhs /= 10;
    //         r = digi[i] / 10;
    //         digi[i] %= 10;
    //     }
    //     zero = false;
    // }
};

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

int gcd(int a, int b){
    if(a == 0){
        return b;
    }
    return gcd(b%a, a);
}

int n;
bigbrain di[1014];

void namica(){
    int a;
    fin >> a;
    for(int d = 1; d <= 1000; d++){
        if(!di[d].zero){
            di[gcd(d, a)].add(di[d]);
        }
    }
    di[a].add(1);
}

int main(){
    fin >> n;
    for(int i = 0; i < n; i++){
        namica();
    }
    di[1].write(fout);
}