Pagini recente » Cod sursa (job #1883450) | Cod sursa (job #1269367) | Cod sursa (job #2452890) | Cod sursa (job #240195) | Cod sursa (job #1024770)
#include <cstdio>
#include <cassert>
using namespace std;
typedef long long int64;
const char IN_FILE[] = "dtcsu.in";
const char OUT_FILE[] = "dtcsu.out";
const int64 oo = int64(1e18);
const int K = 276997;
class Reader {
public:
Reader(FILE *stream, const int size = (1 << 16)):
size(size),
pointer(0),
stream(stream) {
buffer = new char[size];
assert(fread(buffer, 1, size, this->stream) != 0);
}
template<class IntType>
IntType NextInt() {
IntType value = 0;
bool negative = false;
while ((Current() < '0' || Current() > '9') && Current() != '-')
NextPosition();
if (Current() == '-') {
negative = true;
NextPosition();
}
while(Current() >= '0' && Current() <= '9') {
value = value * 10 + Current() - '0';
NextPosition();
}
if (negative)
value = -value;
return value;
}
Reader &operator>>(short &value) {
value = NextInt<short>();
return *this;
}
Reader &operator>>(int &value) {
value = NextInt<int>();
return *this;
}
Reader &operator>>(long long &value) {
value = NextInt<long long>();
return *this;
}
private:
int size;
int pointer;
char *buffer;
FILE *stream;
char Current() const {
return buffer[pointer];
}
void NextPosition() {
if(++pointer == size) {
assert(fread(buffer, 1, size, stream) != 0);
pointer = 0;
}
}
};
int64 Powers[4][40];
int MaxPower[4];
void Preprocess() {
int factors[4] = {3, 5, 7, 11};
for (int i = 0; i < 4; ++i) {
Powers[i][0] = 1;
MaxPower[i] = 0;
while (Powers[i][MaxPower[i]] * factors[i] <= oo) {
Powers[i][MaxPower[i] + 1] = Powers[i][MaxPower[i]] * factors[i];
++MaxPower[i];
}
}
}
inline int GetPower(const int f, const int64 value) {
int left = 1, right = MaxPower[f], power = 0;
while (left <= right) {
int middle = (left + right) >> 1;
if (value % Powers[f][middle] == 0) {
left = middle + 1;
power = middle;
} else {
right = middle - 1;
}
}
return power;
}
int main() {
assert(freopen(IN_FILE, "r", stdin));
assert(freopen(OUT_FILE, "w", stdout));
Preprocess();
Reader in = Reader(stdin);
for (int i = 0; i < K; ++i) {
int64 waste;
in >> waste;
}
int tests, count = 0;
in >> tests;
for (; tests > 0; --tests) {
int64 value;
in >> value;
for (int i = 0; i < 4; ++i)
value /= Powers[i][GetPower(i, value)];
if ((value & (value - 1)) == 0)
++count;
}
printf("%d\n", count);
return 0;
}