From b7cd28790b81dbafe418381f59f1e520fdb9981d Mon Sep 17 00:00:00 2001 From: EndlessCheng Date: Sat, 26 Dec 2020 11:12:13 +0800 Subject: [PATCH] =?utf8?q?=E4=BC=98=E5=8C=96=E5=8F=96=E6=A8=A1=E8=BF=90?= =?utf8?q?=E7=AE=97=E7=9A=84=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- docs/math/poly/lagrange.md | 47 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/docs/math/poly/lagrange.md b/docs/math/poly/lagrange.md index 4b7c5a63..6d8a2b95 100644 --- a/docs/math/poly/lagrange.md +++ b/docs/math/poly/lagrange.md @@ -62,36 +62,37 @@ $$ ### 代码实现 ```cpp -#include #include -#include + const int maxn = 2010; using ll = long long; ll mod = 998244353; ll n, k, x[maxn], y[maxn], ans, s1, s2; -ll powmod(ll a, ll x) { - ll ret = 1ll, nww = a; - while (x) { - if (x & 1) ret = ret * nww % mod; - nww = nww * nww % mod; - x >>= 1; - } - return ret; + +ll powmod(ll x, ll n) { + ll ret = 1ll; + while (n) { + if (n & 1) ret = ret * x % mod; + x = x * x % mod; + n >>= 1; + } + return ret; } + ll inv(ll x) { return powmod(x, mod - 2); } + int main() { - scanf("%lld%lld", &n, &k); - for (int i = 1; i <= n; i++) scanf("%lld%lld", x + i, y + i); - for (int i = 1; i <= n; i++) { - s1 = y[i] % mod; - s2 = 1ll; - for (int j = 1; j <= n; j++) - if (i != j) - s1 = s1 * (k - x[j]) % mod, s2 = s2 * ((x[i] - x[j] % mod) % mod) % mod; - ans += s1 * inv(s2) % mod; - ans = (ans + mod) % mod; - } - printf("%lld\n", ans); - return 0; + scanf("%lld%lld", &n, &k); + for (int i = 1; i <= n; i++) scanf("%lld%lld", x + i, y + i); + for (int i = 1; i <= n; i++) { + s1 = y[i] % mod; + s2 = 1ll; + for (int j = 1; j <= n; j++) + if (i != j) + s1 = s1 * (k - x[j]) % mod, s2 = s2 * (x[i] - x[j]) % mod; + ans += s1 * inv(s2) % mod; + } + printf("%lld\n", (ans % mod + mod) % mod); + return 0; } ``` -- 2.11.0