Cod sursa(job #1042792)

Utilizator raulstoinStoin Raul raulstoin Data 27 noiembrie 2013 18:09:31
Problema Dtcsu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<cstdio>
#include<bitset>

#define NMAX 276997
#define LL long long
#define LMAX 5000000

using namespace std;

FILE *fin,*fout;

int v[]={3,5,7,11},q,sol;
LL n,nr;
bitset<LMAX> use;

const int SZ=10000;
char input[SZ+1],*in;

LL conv()
{
	LL nr=0;
	for(;!(*in>='0' && *in<='9') && *in;in++);
	
	if(in==input+SZ)
	{
		fread(input,1,SZ,fin);
		in=input;
	}
 
	for(;*in>='0' && *in<='9';in++)
	{
		nr=nr*10+(*in-'0');
		if(in+1==input+SZ)
		{
			fread(input,1,SZ,fin);
			in=input-1;
		}
	}
	return nr;
}

int hash(LL x,int k)
{
	int rez=0;
	for(;x;x/=10)
		rez=(rez*k+x%10+1)%LMAX;
	return rez;
}

int main()
{
	fin=fopen("dtcsu.in","r");
	fout=fopen("dtcsu.out","w");
	fread(input,1,SZ,fin);
	in=input;
	for(int i=0;i<NMAX;i++)
	{
		n=conv();
		for(int i=1;i<=3;i++)
			use[ hash(n,i) ]=1;
	}
	
	q=conv();
	for(;q;q--)
	{
		n=conv();
		if(!use[hash(n,1)] || !use[hash(n,2)] || !use[hash(n,3)] )
			continue;
		for(int i=0;i<4;i++)
			for(;n%v[i]==0;n/=v[i]);
		sol+=((n&(n-1))==0);
	}
	fprintf(fout,"%d",sol);
	return 0;
}