Cod sursa(job #1468750)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 6 august 2015 21:36:37
Problema Light2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <vector>
#include <utility>
using namespace std;

int bitcount(int x){
	int rez = 0;
	while(x){
		x ^= (x&-x);
		++rez; }
	return rez; }

long long euclid(long long a, long long b){
	while(a){
		b %= a;
		swap(a, b); }
	return b; }

long long backtrack(const long long n, const int cur, const vector<int>& v, const bool e_pozitiv, const int putere, long long lcm){
	lcm = (lcm * v[cur]) / euclid(lcm, v[cur]);
	long long rez = (n/lcm) * (1<<putere) * (e_pozitiv ? 1 : -1);
	for(int next = cur+1; next < v.size(); ++next){
		rez += backtrack(n, next, v, !e_pozitiv, putere+1, lcm); }
	return rez; }
	

int main(){
	ifstream f("light2.in");
	ofstream g("light2.out");
	long long n;
	int k;
	f >> n >> k;
	vector<int> v(k);
	for(int i = 0; i < k; ++i){
		f >> v[i]; }

	long long rez = 0;
	for(int i = 0; i < k; ++i){
		rez += backtrack(n, i, v, true, 0, 1); }
	g << rez;
	return 0; }