Pagini recente » Cod sursa (job #2610372) | Cod sursa (job #2273889) | Cod sursa (job #2648235) | Cod sursa (job #2890164) | Cod sursa (job #1528033)
#include <fstream>
#include <bitset>
using namespace std;
const unsigned long long maxVal = 10e18;
const int maxBits = 7194323;
bitset<maxBits> bitHash;
int factors[] = {2, 3, 5, 7, 11};
int primes[] = {97571, 104711, 218657, 4194319, 7194323};
void bitHashInsert(unsigned long long x)
{
for (int i = 0; i < 5; i++)
bitHash[x % primes[i]] = 1;
}
bool bitHashGet(unsigned int long long x)
{
bool found = true;
for (int i = 0; i < 5; i++)
if (bitHash[x % primes[i]] == 0)
found = false;
return found;
}
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;
}
unsigned long long next(ifstream &f)
{
string line;
getline(f, line);
unsigned long long result = 0;
for (int i = 0; i < line.size(); i++)
result = result * 10 + (line[i] - '0');
return result;
}
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++)
{
N = next(f);
bitHashInsert(N);
}
Q = next(f);
for (i = 0; i < Q; i++)
{
N = next(f);
if (bitHashGet(N) && check(N))
k++;
}
f.close();
ofstream g("dtcsu.out");
g << k;
g.close();
return 0;
}