in pir.cpp [7:33]
vector<uint64_t> get_dimensions(uint64_t plaintext_num, uint32_t d) {
assert(d > 0);
assert(plaintext_num > 0);
vector<uint64_t> dimensions(d);
for (uint32_t i = 0; i < d; i++) {
dimensions[i] = std::max((uint32_t) 2, (uint32_t) floor(pow(plaintext_num, 1.0/d)));
}
uint32_t product = 1;
uint32_t j = 0;
// if plaintext_num is not a d-power
if ((double) dimensions[0] != pow(plaintext_num, 1.0 / d)) {
while (product < plaintext_num && j < d) {
product = 1;
dimensions[j++]++;
for (uint32_t i = 0; i < d; i++) {
product *= dimensions[i];
}
}
}
return dimensions;
}