Pagini recente » Cod sursa (job #2872066) | Cod sursa (job #121317) | Cod sursa (job #1961184) | Cod sursa (job #2519614) | Cod sursa (job #595839)
Cod sursa(job #595839)
#include <iostream>
#include <fstream>
#define LL long long
using namespace std;
LL n,k,r,d[25];
static inline LL gcd(LL u, LL v){
if(u == v)
return v;
if(0==u)
return v;
if(0==v)
return u;
if(0==(u&1)){
if(0==(v&1))
return (gcd((u>>1), (v>>1))<<1);
else
return gcd(u>>1, v);
}
else if(0==(v&1))
return gcd(u, (v>>1));
else{
if(u>=v)
return gcd(((u-v)>>1), v);
else
return gcd(((v-u)>>1), u);
}
}
inline LL cmmmc(LL a, LL b) {
return (a*b)/(gcd(a,b));
}
void back(int p, int nr,LL pas) {
if(p==k+1 || pas>n) return;
LL cm=cmmmc(pas,d[p]);
if(nr&1) r+=((n/cm)*(1<<(nr-1)));
else r-=((n/cm)*(1<<(nr-1)));
back(p+1,nr,pas);
back(p+1,nr+1,cm);
}
int main()
{
ifstream f("light2.in");
ofstream g("light2.out");
f>>n>>k;
for(int i=1; i<=k; ++i) f>>d[i];
back(1,1,1);
g<<r;
return 0;
}