Cod sursa(job #1233364)

Utilizator george_stelianChichirim George george_stelian Data 25 septembrie 2014 10:52:33
Problema Light2 Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>

using namespace std;

long long v2[30],n,sol;
int v[30],v1[30],m,i,k,nr;

long long cmmmc(long long a,long long b)
{
    if(a==0) a=1;
    if(b==0) b=1;
    long long x=a*b,r=a%b;
    while(r)
    {
        a=b;b=r;
        r=a%b;
    }
    return x/b;
}

int main()
{
    freopen("light2.in", "r", stdin);
    freopen("light2.out", "w", stdout);
    scanf("%lld%d",&n,&m);
    for(i=1;i<=m;i++) scanf("%d",&v[i]);
    k=m;
    sol+=n/v[m];
    v1[m-1]=1;
    v2[++nr]=v[m-1];
    while(k)
        if(k==m)
        {
            if(nr%2) sol+=(n/v2[nr])*nr-(n/cmmmc(v2[nr],v[k]))*(nr+1);
            else sol-=(n/v2[nr])*nr-(n/cmmmc(v2[nr],v[k]))*(nr+1);
            k--;
        }
        else
        {
            if(v1[k]==0)
            {
                v1[k]=1;
                v2[++nr]=cmmmc(v2[nr-1],v[k]);
                k=m;
            }
            else
            {
                v1[k]=0;
                nr--;
                k--;
            }
        }
    printf("%lld",sol);
    return 0;
}