in pir.cpp [80:100]
uint32_t plainmod_after_expansion(uint32_t logt, uint32_t N, uint32_t d,
uint64_t ele_num, uint64_t ele_size) {
// Goal: find max logtp such that logtp + ceil(log(ceil(d_root(n)))) <= logt
// where n = ceil(ele_num / floor(N*logtp / ele_size *8))
for (uint32_t logtp = logt; logtp >= 2; logtp--) {
uint64_t n = plaintexts_per_db(logtp, N, ele_num, ele_size);
if (logtp == logt && n == 1) {
return logtp - 1;
}
if ((double)logtp + ceil(log2(ceil(pow(n, 1.0/(double)d)))) <= logt) {
return logtp;
}
}
assert(0); // this should never happen
return logt;
}