Pagini recente » Cod sursa (job #2927818) | Cod sursa (job #1484957) | Cod sursa (job #1483880) | Cod sursa (job #1759710) | Cod sursa (job #1046409)
#include <fstream>
#include <cstdio>
#include <bitset>
using namespace std;
ofstream G("dtcsu.out");
const int f_size = 1000010;
const int mod[] = { 666013, 1000003 , 826663 , 797593 , 959473 };
const int val[] = { 15 , 3 , 5 , 7 , 11 };
bitset<f_size> filter[5];
void insert(long long x)
{
for (int i=0;i<5;++i)
filter[i][ x%mod[i] ] = 1;
}
int find(long long x)
{
for (int i=0;i<5;++i)
if ( filter[i][ x%mod[i] ] == 0 )
return 0;
return 1;
}
const int N = 276997;
int Q,out;
const int Buffer=100000;
char Buff[Buffer]; int Next=0;
#define F stdin
long long get()
{
long long Nbr=0;
while( Buff[Next]<'0' || '9'<Buff[Next] )
if ( ++Next >= Buffer ) fread(Buff,Buffer,1,F), Next=0;
while ( '0'<=Buff[Next] && Buff[Next]<='9' )
{
Nbr=Nbr*10+Buff[Next]-'0';
if ( ++Next >= Buffer ) fread(Buff,Buffer,1,F), Next=0;
}
return Nbr;
}
int main()
{
freopen("dtcsu.in","r",stdin);
for (int i=1;i<=N;++i)
{
long long X = get();
for (int i=0;i<5;++i)
filter[i][ X%mod[i] ] = 1;
}
Q = get();
for (int i=1;i<=Q;++i)
{
long long X = get();
bool ok = 1;
for (int i=0;i<5 && ok;++i)
if ( filter[i][ X%mod[i] ] == 0 )
ok = 0;
if ( ok )
{
X /= (X&(-X));
for ( ; (X/15)*15 == X ; X /= 15 );
for ( ; (X/3)*3 == X ; X /= 3 );
for ( ; (X/5)*5 == X ; X /= 5 );
for ( ; (X/7)*7 == X ; X /= 7 );
for ( ; (X/11)*11 == X ; X /= 11 );
if ( X == 1 ) ++out;
}
}
G<<out<<'\n';
}