diff --git a/src/8/20/P2312.cpp b/src/8/20/P2312.cpp new file mode 100644 index 0000000..aa14d40 --- /dev/null +++ b/src/8/20/P2312.cpp @@ -0,0 +1,88 @@ +#include +#include +#include +#include + +using i128 = __int128_t; +using ll = int64_t; + +ll n, m; +const std::vector mods = {(ll)1e9+7}; +std::vector> a; + +ll strp(const std::string &s, ll p) { + ll num = 0; + int idx = 0; + ll nag = 1; + if (s[0] == '-') { + nag = -1; + idx = 1; + } + for (size_t i = idx; i < s.length(); ++i) { + num = (num * 10 + (s[i] - '0')) % p; + } + num = (num * nag) % p; + if (num < 0) { + num += p; + } + return num; +} + +int main() { + + std::ios_base::sync_with_stdio(false); + std::cin.tie(NULL); + + std::cin >> n >> m; + a.resize(n + 1, std::vector(mods.size())); + for (int i = 0; i <= n; ++i) { + std::string tmpstr; + std::cin >> tmpstr; + for (size_t k = 0; k < mods.size(); ++k) { + a[i][k] = strp(tmpstr, mods[k]); + } + } + + std::vector sol; + sol.reserve(100); + + for (ll i = 1; i <= m; ++i) { + bool isok = true; + for (size_t k = 0; k < mods.size(); ++k) { + + const ll p = mods[k]; + const auto &cur = a; + + ll curx = 1; + i128 sum = 0; + + for (int j = 0; j <= n; ++j) { + + sum += (i128)cur[j][k] * curx; + curx = (curx * i) % p; + + if ((j & 15) == 15) { + sum %= p; + } + } + + sum %= p; + + if (sum != 0) { + isok = false; + break; + } + } + + if (isok) { + sol.push_back(i); + } + } + + std::cout << sol.size() << '\n'; + for (ll ans : sol) { + std::cout << ans << '\n'; + } + + return 0; +}