Pagini recente » Cod sursa (job #3208688) | Cod sursa (job #3221164) | Cod sursa (job #1315548) | Cod sursa (job #1134174) | Cod sursa (job #2207780)
#include <bits/stdc++.h>
#define SMAX 131072
#define N 276997
#define BMAX 30571351
using namespace std;
constexpr const uint8_t D[5] = {2, 3, 5, 7, 11};
char s[SMAX];
int p;
FILE *f;
bitset<BMAX> H;
void read(uint64_t &x) {
x = 0;
for (; s[p] >= '0' && s[p] <= '9'; ++p) {
x = 10 * x + s[p] - '0';
if (p == SMAX - 1) {
fread(s, 1, SMAX, f);
p = -1;
}
}
for (; s[p] < '0' || s[p] > '9'; ++p) {
if (p == SMAX - 1) {
fread(s, 1, SMAX, f);
p = -1;
}
}
}
inline void insert(uint64_t x) {
// uint32_t u = (x ^ -x << 32) >> 32;
// uint32_t l = (x ^ -(x >> 32)) & 0x0000FFFF;
uint32_t u = x >> 32;
uint8_t l = x & 0x0000FFFF;
H[u % BMAX] = 1;
H[l % BMAX] = 1;
}
inline bool contains(uint64_t x) {
// uint32_t u = (x ^ (-x << 32)) >> 32;
// uint32_t l = (x ^ -(x >> 32)) & 0x0000FFFF;
uint32_t u = x >> 32;
uint8_t l = x & 0x0000FFFF;
return H[u % BMAX] == 1 && H[l % BMAX] == 1;
}
inline bool isTrulyMember(uint64_t x) {
for (int i = 0; i < 5 && x > 1; ++i) {
for (; x > 1 && x % D[i] == 0; x /= D[i]);
}
return x == 1;
}
int main() {
f = fopen("dtcsu.in", "r");
FILE* g = fopen("dtcsu.out", "w");
fread(s, 1, SMAX, f);
p = 0;
for (int i = 0; i < N; ++i) {
uint64_t x;
read(x);
insert(x);
}
uint64_t n;
read(n);
int k = 0;
while (n--) {
uint64_t x;
read(x);
if (contains(x) && isTrulyMember(x)) {
++k;
}
}
fprintf(g, "%d\n", k);
return 0;
}