Pagini recente » Cod sursa (job #545308) | Cod sursa (job #1629251) | Cod sursa (job #1903410) | Cod sursa (job #791927) | Cod sursa (job #550685)
Cod sursa(job #550685)
#include<stdio.h>
#define ll long long
using namespace std;
ll n;
ll k;
ll D[23];
int L[23];
ll nr = 0;
ll Doi[23];
void citire(void)
{
FILE *f = fopen("light2.in","r");
fscanf(f,"%lld %d",&n,&k);
for(long int i=1;i<=k;i++)
{
fscanf(f,"%d ",&D[i]);
// nr += n/D[i];
}
fclose(f);
}
void afisare(int v)
{
for(int i=1;i<=v;i++)
printf("%d ",D[i]);
}
int cmmmc(int a,int b)
{
int r = a%b;
int a1 = a;
int b1 = b;
while(r)
{
a1 = b1;
b1 = r;
r = a1%b1;
}
return ((long long)(a*b)/b1);
}
void calc(int a,ll prod,long int nri)
{
prod = cmmmc(prod,D[a]);
if(nri&1)
nr += (Doi[nri]*(n/prod));
else
nr -= (Doi[nri]*(n/prod));
for(int i=a+1;prod<n && i<=k;i++)
calc(i,prod,nri+1);
}
void doi(void)
{
Doi[1] = 1;
for(int i=2;i<=23;i++)
Doi[i] = Doi[i-1]*2;
}
int main()
{
FILE *f = fopen("light2.out","w");
citire();
doi();
for(int i=1;i<=k;i++)
calc(i,1,1);
fprintf(f,"%d ",nr);
fclose(f);
return 0;
}