aboutsummaryrefslogtreecommitdiffstats
path: root/p_adic.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'p_adic.cpp')
-rw-r--r--p_adic.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/p_adic.cpp b/p_adic.cpp
new file mode 100644
index 0000000..30080ac
--- /dev/null
+++ b/p_adic.cpp
@@ -0,0 +1,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;
+};