Cod sursa(job #996699)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 12 septembrie 2013 15:22:07
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<fstream>
using namespace std;
long long n,d[25],sol;
int K,put[25];

inline long long Gcd(long long a,long long b)
{
	long long r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	return a;
}

inline void Back(int pas,int nr1,long long lcm)
{
	if(lcm>n)
		return;
	if(pas==K)
	{
		if(nr1%2==1)
			sol+=1LL*put[nr1-1]*(n/lcm);
		else
			sol-=1LL*put[nr1-1]*(n/lcm);
	}
	else
	{
		Back(pas+1,nr1,lcm);
		Back(pas+1,nr1+1,(lcm*d[pas])/Gcd(lcm,d[pas]));
	}
}

int main()
{
	int i;
	ifstream fin("light2.in");
	fin>>n>>K;
	for(i=0;i<K;i++)
		fin>>d[i];
	fin.close();
	
	put[0]=1;
	for(i=1;i<=K;i++)
		put[i]=2*put[i-1];
	Back(0,0,1LL);
	
	ofstream fout("light2.out");
	fout<<sol<<"\n";
	fout.close();
	return 0;
}