Pagini recente » Cod sursa (job #591194) | Cod sursa (job #1300652) | Cod sursa (job #2699461) | Cod sursa (job #1243203) | Cod sursa (job #1046385)
#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 };
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=1<<13;
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();
insert(X);
}
Q = get();
for (int i=1;i<=Q;++i)
{
long long X = get();
if ( find(X) == 1 )
{
X /= (X&(-X));
for (int j=0;j<4;++j)
while ( X % val[j] == 0 )
X /= val[j];
if ( X == 1 ) out++;
}
}
G<<out<<'\n';
}