vector get_dimensions()

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;
}