diff options
| author | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-11-16 21:43:46 +0100 |
|---|---|---|
| committer | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-11-16 21:43:46 +0100 |
| commit | 3fe8ee352845741d97a76e2ed6a390cb1481d755 (patch) | |
| tree | 92f43538f1094130676a2be5ffa4879586db3cb7 | |
| parent | 1880ccb6d85c6eb79e724593457877bab431951c (diff) | |
minor changes
| -rw-r--r-- | content/math/transforms/multiplyNTT.cpp | 2 | ||||
| -rw-r--r-- | content/other/josephus2.cpp | 6 | ||||
| -rw-r--r-- | content/other/other.tex | 4 | ||||
| -rw-r--r-- | test.h | 33 | ||||
| -rw-r--r-- | test/other/josephus2.cpp | 2 | ||||
| -rw-r--r-- | test/util.h | 8 |
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}
@@ -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) { |
