Pagini recente » Cod sursa (job #93185) | Cod sursa (job #2509934) | Cod sursa (job #241605) | Cod sursa (job #3003431) | Cod sursa (job #2207983)
#include <bits/stdc++.h>
#define SMAX 65536
#define N 276997
#define BMAX 33554432 // 64 blocks of 64K
#define BSIZE 524288
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) {
uint8_t b = x % 64;
uint32_t p = BSIZE * b;
uint32_t u = x >> 32;
uint32_t l = x;
uint32_t m = x >> 16;
H[p + u % BSIZE] = 1;
H[p + l % BSIZE] = 1;
H[p + m % BSIZE] = 1;
}
inline bool contains(uint64_t x) {
uint8_t b = x % 64;
uint32_t p = BSIZE * b;
uint32_t u = x >> 32;
uint32_t l = x;
uint32_t m = x >> 16;
return H[p + u % BSIZE] == 1 &&
H[p + l % BSIZE] == 1 &&
H[p + m % BSIZE] == 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("dtcsu1.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)) {
// if (contains(x)) {
++k;
}
}
fprintf(g, "%d\n", k);
// fprintf(stdout, "%.8lf\n", (double) k / 5000000);
return 0;
}