Pagini recente » Cod sursa (job #3256796) | Cod sursa (job #455683) | Cod sursa (job #290562) | Cod sursa (job #1506201) | Cod sursa (job #540550)
Cod sursa(job #540550)
Utilizator |
Adrian Diaconu DITzoneC |
Data |
24 februarie 2011 01:10:03 |
Problema |
Light2 |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.71 kb |
#include <cstdio>
int k, A[32];
long long n, sol;
int gcd(long long a, int b)
{
while(a && b)
if(a >= b)
a %= b;
else
b %= a;
return a | b;
}
void doit(int i, int nrA, int nrB, long long p)
{
if(p > n)
return;
if(i == k)
{
if(nrA)
if(nrB)
sol -= n / p;
else
sol += n / p;
return ;
}
doit(i + 1, nrA, nrB, p);
p = p / gcd(p, A[i]) * A[i];
doit(i + 1, nrA ^ 1, nrB, p);
doit(i + 1, nrA, nrB ^ 1, p);
}
int main()
{
int i;
freopen("light2.in", "r", stdin);
freopen("light2.in", "w", stdout);
scanf("%lld", &n);
scanf("%d", &k);
for(i = 0; i < k; ++ i)
scanf("%d", &A[i]);
doit(0, 0, 0, 1);
printf("%lld\n", sol);
return 0;
}