Pagini recente » Cod sursa (job #706942) | Cod sursa (job #258414) | Cod sursa (job #1763708) | Cod sursa (job #2339331) | Cod sursa (job #2240967)
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll INF = 1e18;
const int MAXK = 22;
inline ll gcd(ll a, ll b) {
ll r;
while(b > 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
int d[MAXK];
ll fr[MAXK + 2];
int main() {
FILE *fi, *fout;
int i, k;
ll n;
fi = fopen("light2.in" ,"r");
fout = fopen("light2.out" ,"w");
fscanf(fi,"%lld %d " ,&n,&k);
for(i = 0; i < k; i++) {
fscanf(fi,"%d " ,&d[i]);
}
for(int conf = 1; conf < (1 << k); conf++) {
ll prd = 1;
int cnt = 0;
bool bad = 0;
for(i = 0; i < k; i++) {
if(conf & (1 << i)) {
cnt++;
prd /= gcd(prd, d[i]);
if(INF / prd < d[i]) {
bad = 1;
break;
}
prd *= d[i];
}
}
if(!bad) {
for(i = cnt; i >= 1; i--) {
if((cnt - i) & 1) {
fr[i] -= n / prd;
}
else {
fr[i] += n / prd;
}
}
}
}
ll ans = 0;
for(i = 1; i <= k; i += 2) {
ans += fr[i] - fr[i + 1];
}
fprintf(fout,"%lld" ,ans);
fclose(fi);
fclose(fout);
return 0;
}