Cod sursa(job #2201134)

Utilizator Andrei_CotorAndrei Cotor Andrei_Cotor Data 3 mai 2018 18:12:25
Problema Indep Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<fstream>
using namespace std;
ifstream fi("indep.in");
ofstream fo("indep.out");
typedef struct nr{int nrc,C[160];} NR;
NR Dp[2][1005];
int n,i,cr,A[505],j;

void adu(NR &a, NR &b)
{
    int i,T=0;
    if(b.nrc>a.nrc)
        a.nrc=b.nrc;
    for(i=1; i<=a.nrc; i++)
    {
        a.C[i]=a.C[i]+b.C[i]+T;
        T=a.C[i]/10;
        a.C[i]%=10;
    }
    while(T)
    {
        a.C[++a.nrc]=T%10;
        T/=10;
    }
}

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

void afis()
{
    int i;
    for(i=Dp[n%2][1].nrc; i>=1; i--)
        fo<<Dp[n%2][1].C[i];
}

int main()
{
    fi>>n;
    for(i=1; i<=n; i++)
        fi>>A[i];
    Dp[0][0].nrc=Dp[0][0].C[1]=1;
    for(i=1; i<=n; i++)
    {
        cr=i%2;
        for(j=0; j<=1000; j++)
            Dp[cr][j]=Dp[1-cr][j];
        for(j=0; j<=1000; j++)
            adu(Dp[cr][cmmdc(j,A[i])],Dp[1-cr][j]);
    }
    afis();
    fi.close();
    fo.close();
    return 0;
}