aboutsummaryrefslogtreecommitdiffstats
path: root/p_adic.cpp
blob: 30080ac0fa7f4f36adf57fdca1bcb511cc0c2cca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "low_discrepancy.hpp"

p_adic::p_adic(int n, int p) : p(p) {
    int puiss = 1;
    while (n > 0) {
        ak.push_back(n % p);
        pk.push_back(puiss);
        puiss *= p;
        n -= ak.back();
        n /= p;
    }
    pk.push_back(puiss);
};

void p_adic::increment() {
    coeff::iterator i = ak.begin();
    while ((i != ak.end()) && ((*i)+1 == p)) { (*i) = 0; i++; }
    if (i == ak.end()) {
        ak.push_back(1);
        pk.push_back(pk.back()*p);
    }
    else (*i) += 1;
};