summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGloria Mundi <gloria@gloria-mundi.eu>2024-11-16 21:43:46 +0100
committerGloria Mundi <gloria@gloria-mundi.eu>2024-11-16 21:43:46 +0100
commit3fe8ee352845741d97a76e2ed6a390cb1481d755 (patch)
tree92f43538f1094130676a2be5ffa4879586db3cb7
parent1880ccb6d85c6eb79e724593457877bab431951c (diff)
minor changes
-rw-r--r--content/math/transforms/multiplyNTT.cpp2
-rw-r--r--content/other/josephus2.cpp6
-rw-r--r--content/other/other.tex4
-rw-r--r--test.h33
-rw-r--r--test/other/josephus2.cpp2
-rw-r--r--test/util.h8
6 files changed, 14 insertions, 41 deletions
diff --git a/content/math/transforms/multiplyNTT.cpp b/content/math/transforms/multiplyNTT.cpp
index aec2a61..d234ce3 100644
--- a/content/math/transforms/multiplyNTT.cpp
+++ b/content/math/transforms/multiplyNTT.cpp
@@ -1,5 +1,5 @@
vector<ll> mul(vector<ll> a, vector<ll> b) {
- int n = 1 << (__lg(ssize(a) + ssize(b) - 1) + 1);
+ int n = 1 << bit_width(size(a) + size(b) - 1);
a.resize(n), b.resize(n);
ntt(a), ntt(b);
for (int i=0; i<n; i++) a[i] = a[i] * b[i] % mod;
diff --git a/content/other/josephus2.cpp b/content/other/josephus2.cpp
index 33544ea..1c4295d 100644
--- a/content/other/josephus2.cpp
+++ b/content/other/josephus2.cpp
@@ -1,5 +1,5 @@
-int rotateLeft(int n) { // Der letzte Überlebende, 1-basiert.
+ll rotateLeft(ll n) { // Der letzte Überlebende, 0-basiert.
int bits = __lg(n);
- n ^= 1 << bits;
- return 2 * n + 1;
+ n ^= 1ll << bits;
+ return n << 1;
}
diff --git a/content/other/other.tex b/content/other/other.tex
index 426875a..9f8cfce 100644
--- a/content/other/other.tex
+++ b/content/other/other.tex
@@ -86,8 +86,7 @@
$n$ Personen im Kreis, jeder $k$-te wird erschossen.
\begin{description}
\item[Spezialfall $\boldsymbol{k=2}$:] Betrachte $n$ Binär.
- Für $n = 1b_1b_2b_3..b_n$ ist $b_1b_2b_3..b_n1$ die Position des letzten Überlebenden.
- (Rotiere $n$ um eine Stelle nach links)
+ Für $n = 1b_1b_2b_3..b_n$ ist $b_1b_2b_3..b_n0$ die Position des letzten Überlebenden.
\end{description}
\sourcecode{other/josephus2.cpp}
@@ -98,7 +97,6 @@
Also: $F(n,k) = (F(n-1,k)+k)\%n$. Basisfall: $F(1,k) = 0$.
\end{description}
\sourcecode{other/josephusK.cpp}
- \textbf{Beachte bei der Ausgabe, dass die Personen im ersten Fall von $\boldsymbol{1, \ldots, n}$ nummeriert sind, im zweiten Fall von $\boldsymbol{0, \ldots, n-1}$!}
\end{algorithm}
\begin{algorithm}[optional]{Zeileneingabe}
diff --git a/test.h b/test.h
deleted file mode 100644
index 0dfc40a..0000000
--- a/test.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#define _GLIBCXX_DEBUG 1
-#define _GLIBCXX_SANITIZE_VECTOR 1
-#include <bits/stdc++.h>
-using namespace std;
-using ll = long long;
-
-template<typename T>
-T _lg_check(T n) {
- assert(n > 0);
- return __lg(n);
-}
-
-#define __lg _lg_check
-
-namespace util {
-
-mt19937 rd(0);
-
-int randint(int l, int r) {
- assert(l <= r);
- return uniform_int_distribution<int>(l, r)(rd);
-}
-
-int randint(int x) {
- assert(x > 0);
- return randint(0, x-1);
-}
-
-int randint() {
- return randint(-1'000'000, +1'000'000);
-}
-
-}
diff --git a/test/other/josephus2.cpp b/test/other/josephus2.cpp
index c6b1cd1..f2c0440 100644
--- a/test/other/josephus2.cpp
+++ b/test/other/josephus2.cpp
@@ -15,7 +15,7 @@ void stress_test() {
ll tests = 0;
for (ll i = 1; i < 2'000; i++) {
auto got = rotateLeft(i);
- auto expected = naive<1>(i, 2);
+ auto expected = naive<0>(i, 2);
if (got != expected) cerr << "error: " << i << FAIL;
tests++;
}
diff --git a/test/util.h b/test/util.h
index 0c14ff8..e0d9b57 100644
--- a/test/util.h
+++ b/test/util.h
@@ -10,6 +10,14 @@ namespace INT {constexpr int INF = 0x3FFF'FFFF;}
namespace LL {constexpr ll INF = 0x3FFF'FFFF'FFFF'FFFFll;}
namespace LD {constexpr ld INF = numeric_limits<ld>::infinity();}
+template<typename T>
+T _lg_check(T n) {
+ assert(n > 0);
+ return __lg(n);
+}
+
+#define __lg _lg_check
+
namespace details {
template<typename T = ll>
bool isPrime(T x) {