Pagini recente » Cod sursa (job #2875954) | Cod sursa (job #681097) | Cod sursa (job #2630385) | Cod sursa (job #2942396) | Cod sursa (job #1527983)
#include <fstream>
#include <bitset>
using namespace std;
const unsigned long long maxVal = 10e18;
const int maxBits = 2097169;
bitset<maxBits> bitHash;
int factors[] = {2, 3, 5, 7, 11};
unsigned int h(unsigned long long x)
{
int pos = 0, nextBit = 0;
unsigned int r = 0;
while (x)
{
if (pos % 2 == 0)
{
r |= (x & 1) << nextBit;
nextBit++;
}
x >>= 1;
pos++;
}
return r % maxBits;
}
unsigned int g(unsigned long long x)
{
int pos = 0, nextBit = 0;
unsigned int r = 0;
while (x)
{
if (pos % 2 != 0)
{
r |= (x & 1) << nextBit;
nextBit++;
}
x >>= 1;
pos++;
}
return r % maxBits;
}
bool check(unsigned long long x)
{
int i;
for (i = 0; i < 5; i++)
while (x != 1 && x % factors[i] == 0)
x /= factors[i];
return x == 1;
}
int main()
{
unsigned long long N;
int Q, k = 0, i;
const int entries = 276997;
ifstream f("dtcsu.in");
for (i = 0; i < entries; i++)
{
f >> N;
bitHash[h(N)] = 1;
bitHash[g(N)] = 1;
}
f >> Q;
for (i = 0; i < Q; i++)
{
f >> N;
if (bitHash[h(N)] && bitHash[g(N)] && check(N))
k++;
}
f.close();
ofstream g("dtcsu.out");
g << k;
g.close();
return 0;
}