Pagini recente » Cod sursa (job #830241) | Cod sursa (job #1499888) | Cod sursa (job #1854074) | Cod sursa (job #3235525) | Cod sursa (job #1046419)
/*
#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=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<5;++j)
while ( X % val[j] == 0 )
X /= val[j];
if ( X == 1 ) out++;
}
}
G<<out<<'\n';
}
*/
#include <bitset>
#include <cstdio>
using namespace std;
const int maxb=200000;
int ptr=0;
char buff[maxb];
inline long long GetLong (long long &nr)
{
nr=0;
while (buff[ptr]<'0' || buff[ptr]>'9')
if ((++ptr)>=maxb)
{
ptr=0;
fread(buff, 1, maxb, stdin);
}
while (buff[ptr]>='0' && buff[ptr]<='9')
{
nr=nr*10+buff[ptr]-'0';
if ((++ptr)>=maxb)
{
ptr=0;
fread(buff, 1, maxb, stdin);
}
}
return nr;
}
const int Mod[5]={666013, 1000003, 826663, 797593, 959473};
int Val[5]={15, 3, 5, 7, 11};
int N=276997, ANS;
long long X, Q;
bitset<1000010> V[5];
int main ()
{
freopen("dtcsu.in", "r", stdin);
freopen("dtcsu.out", "w", stdout);
fread(buff, 1, maxb, stdin);
for(int i=1; i<=276997; i++)
{
long long X;
GetLong(X);
for(int j=0; j<5; j++)
V[j][X%Mod[j]]=1;
}
GetLong(Q);
for(; Q; Q--)
{
GetLong(X);
bool OK=1;
for(int j=0; j<5 && OK; j++)
if(V[j][X%Mod[j]] == 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) ANS++;
}
}
printf("%d\n", ANS);
return 0;
}