Cod sursa(job #1031876)

Utilizator darrenRares Buhai darren Data 15 noiembrie 2013 18:32:53
Problema Dtcsu Scor 20
Compilator cpp Status done
Runda FMI No Stress 4 Marime 1.37 kb
#include <fstream>
#include <algorithm>
#include <unordered_set>

using namespace std;

ifstream fin("dtcsu.in");
ofstream fout("dtcsu.out");

char parse[1 << 18], *now;
inline void verify()
{
	if (*now == 0)
	{
		fin.get(parse, 1 << 18, '\0');
		now = parse;
	}
}
void skip()
{
	while (!(*now >= '0' && *now <= '9'))
	{
		++now;
		verify();
	}
	while (*now >= '0' && *now <= '9')
	{
		++now;
		verify();
	}
}
long long get()
{
	while (!(*now >= '0' && *now <= '9'))
	{
		++now;
		verify();
	}
	
	long long num = 0;
	while (*now >= '0' && *now <= '9')
	{
		num = num * 10 + (*now - '0');
		++now;
		verify();
	}
	return num;
}

unordered_set<long long> S;
int Q, result;

int main()
{
	now = parse;
	verify();
	
	long long num;
	for (int i = 1; i <= 276997; ++i)
	{
		skip();
		//S.insert(num);
	}
	
	long long aux;
	int numb = 0;
	
	Q = get();
	for (int i = 1; i <= Q; ++i)
	{
		num = get();
		
		aux = (num & (-num)) - 1;
		
		numb = 0;
		while (aux)
		{
			++numb;
			aux &= aux - 1;
		}
		num >>= numb;
		
		while (num % 729 == 0) num /= 729;
		while (num % 3 == 0) num /= 3;
		while (num % 3125 == 0) num /= 3125;
		while (num % 5 == 0) num /= 5;
		while (num % 2401 == 0) num /= 2401;
		while (num % 7 == 0) num /= 7;
		while (num % 11 == 0) num /= 11;
		
		if (num == 1) ++result;
		//if (S.find(num) != S.end())
		//	++result;
	}
	
	fout << result << '\n';
	
	fin.close();
	fout.close();
}