Pagini recente » Cod sursa (job #362259) | Cod sursa (job #731612) | Cod sursa (job #1227867) | Cod sursa (job #1799755) | Cod sursa (job #613064)
Cod sursa(job #613064)
#include <stdio.h>
#include <assert.h>
#define KMax 32
typedef long long ll;
const char IN[]="light2.in",OUT[]="light2.out";
ll N,K,R;
int a[KMax];
bool b[KMax];
ll gcd(ll a,ll b)
{
ll r;
while (b)
b=(r=a%b,a=b,r);
assert(a!=0);
return a;
}
void solve(int x,int ct,ll mult)
{
if (x>K) return;
if (b[x-1])
{
if (ct&1)
R+= N/mult * (1<<ct-1);
else
R-= N/mult * (1<<ct-1);
}
if (x==K) return;
b[x]=0; solve( x+1 , ct , mult );
b[x]=1; solve( x+1 , ct+1 , mult*a[x]/gcd(mult,a[x]));
b[x]=0;
}
int main()
{
int i,j;
assert(freopen(IN,"r",stdin));
assert(scanf("%lld%lld",&N,&K)==2);
for (i=0;i<K;++i) assert(scanf("%d",a+i)==1);
fclose(stdin);
solve( 1 , 0 , 1);
b[0]=1; solve( 1 , 1 , 1LL* a[0] );
assert(freopen(OUT,"w",stdout));
printf("%lld\n",R);
fclose(stdout);
return 0;
}