Cod sursa(job #1525109)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 14 noiembrie 2015 19:09:26
Problema Light2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<stdio.h>

FILE *fin,*fout;

int n,k,po[23],a[23];
long long int sol;

long long int gcd(long long int a,long long int b)
{
    long long int t;
    while(b!=0)
    {
        t=a;
        a=b;
        b=t%b;
    }
    return a;
}

long long int scm(long long int a,long long int b)
{
    return (a*b)/gcd(a,b);
}

void solve(int pas,int nr,long long int val)
{
    if(val>n)
    {
        return;
    }
    if(pas==k)
    {
        if(nr%2==1)
        {
            sol+=po[nr-1]*(n/val);
        }
        else
        {
            sol-=po[nr-1]*(n/val);
        }
    }
    else
    {
        solve(pas+1,nr,val);
        solve(pas+1,nr+1,scm(a[pas],val));
    }
}

int main()
{
    fin=fopen("light2.in","r");
    fout=fopen("light2.out","w");

    fscanf(fin,"%d %d",&n,&k);
    for(int i=1;i<=k;i++)
    {
        fscanf(fin,"%d",&a[i]);
    }

    po[0]=1;
    for(int i=1;i<23;i++)
    {
        po[i]=po[i-1]<<1;
    }

    solve(1,0,1);

    fprintf(fout,"%lld",sol);
}