Pagini recente » Cod sursa (job #575213) | Cod sursa (job #2627452) | Cod sursa (job #1799905) | Cod sursa (job #666208) | Cod sursa (job #1024774)
#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], StepBegin[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];
}
for (StepBegin[i] = 1; StepBegin[i] <= MaxPower[i]; StepBegin[i] <<= 1);
StepBegin[i] >>= 1;
}
}
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) {
int power = 0;
for (int step = StepBegin[i]; step > 0; step >>= 1)
if (power + step <= MaxPower[i] && value % Powers[i][power + step] == 0)
power += step;
value /= Powers[i][power];
}
if ((value & (value - 1)) == 0)
++count;
}
printf("%d\n", count);
return 0;
}