Cod sursa(job #1737817)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 4 august 2016 21:40:38
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
#define MAXK 30
using namespace std;
long long n,answer=0;
int k;
int d[MAXK],v[MAXK];
long long gcd(long long a,long long b){
    long long r;
    while(b!=0){
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
long long lcm(long long a,long long b){
    return a*b/gcd(a,b);
}
void Backtracking(int level,int sign,long long value){
    answer=answer+(1LL<<(level-2))*sign*(n/value);
    if(level<=k)
        for(v[level]=v[level-1]+1;v[level]<=k;v[level]++)
            Backtracking(level+1,-sign,lcm(value,d[v[level]]));
}
int main(){
    freopen("light2.in","r",stdin);
    freopen("light2.out","w",stdout);
    int i;
    scanf("%lld%d",&n,&k);
    for(i=1;i<=k;i++)
        scanf("%d",&d[i]);
    Backtracking(1,-1,1);
    printf("%lld",answer);
    return 0;
}