Cod sursa(job #1343821)

Utilizator MaarcellKurt Godel Maarcell Data 15 februarie 2015 22:42:10
Problema Light2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>
#define LL long long int
using namespace std;

LL N,d[30],aux=1,sum; int K,P;

LL gcd(LL a, LL b){
    if (!b) return a;
    return gcd(b,a%b);
}

void comb(int cnt, int ind){
    if (cnt==0){
        sum+=N/aux;
        return;
    }

    if (K-ind+1>cnt)
        comb(cnt,ind+1);

    LL gc=gcd(aux,d[ind]);
    aux=(aux*d[ind])/gc;
    comb(cnt-1,ind+1);
    aux=(aux*gc)/d[ind];
}

int main(){
    ifstream fin("light2.in");
    ofstream fout("light2.out");
    fin >> N >> K;

    LL i,res=0;
    for (i=1; i<=K; i++) fin >> d[i];

    for (i=1; i<=K; i++){
        sum=0;
        comb(i,1);
        if (i%2) res+=(1<<(i-1))*sum;
        else res-=(1<<(i-1))*sum;
    }

    fout << res;
    return 0;
}