Cod sursa(job #2062610)

Utilizator alex2kamebossPuscasu Alexandru alex2kameboss Data 10 noiembrie 2017 17:25:13
Problema Indep Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <cstdio>
#include <vector>
#define B 1000000000
using namespace std;
vector <int> s[1005];
int cmmmc(int a, int b)
{
    int r;
    while(b!=0)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
inline vector<int>adunare(vector<int> a, vector <int> b)
{
    int la=a.size(),lb=b.size(),ant=0,lm=max(la,lb);
    vector <int> d;
    d.clear();
    for(int i=0;i<lm || ant!=0;++i)
    {
        if(i<la)
            ant+=a[i];
        if(i<lb)
            ant+=b[i];
        d.push_back(ant%B);
        ant/=B;
    }
    if(d.empty())
        d.push_back(0);
    return d;
}
int main()
{
    freopen("indep.in","r",stdin);
    freopen("indep.out","w",stdout);
    vector <int> unu;
    unu.push_back(1);
    int n,a;
    scanf("%d", &n);
    for(;n>0;--n)
    {
        scanf("\n%d", &a);
        for(int i=1;i<=1000;++i)
        {
            int c=cmmmc(i,a);
            s[c]=adunare(s[c],s[i]);
        }
        s[a]=adunare(s[a],unu);
    }
    printf("%d",s[1].back());
    for(int i=s[1].size()-2;i>=0;--i)
        printf("%09d", s[1][i]);
    return 0;
}