給出平面上 n 個點,唯一確定乙個多項式(次數小於等於 n-1 ),並給乙個值求 f(k
)f(k)
f(k)
mod 998244353
根據線性代數裡的結論,從 n 個點得到的 f(x) 可以如下表示
f (x
)=∑i
=1ny
i×∏j
=1,j
≠inx
−xjx
i−xj
f(x)=\displaystyle\sum_^ y_i × \displaystyle\prod_^ \over }
f(x)=i
=1∑n
yi
×j=1
,j
=i∏n
xi
−xj
x−xj
其中 x−x
jxi−
xj
\displaystyle \over }
xi−xj
x−x
j 被稱作插值基,容易驗證將某個給出的點(n個點中的某個點)帶入(定為m)時:
x m=
xi
x_m=x_i
xm=xi
時,該插值基的值為1
x m≠
xi
x_m≠x_i
xm=
xi時,分子上有一項是0,該插值基的值為0.
這就驗證了 f(x) 過這 n 個點
計算過程比較簡單,直接帶入即可,複雜度 o(n
2)
o(n^2)
o(n2)
值得一提的是因為每一項都有乙個大分母,並且還要取模,不難想到需要求分母的乘法逆元。
取模數是個質數,就可以採用費馬小定理求逆。
當 p 是質數時,ap≡
a(mo
dp
)a ^p\equiv a(modp)
ap≡a(m
odp)
,或者說ap−
1≡1(
modp
)a ^\equiv 1(modp)
ap−1≡1
(mod
p),後者進行拆分:
a p−
2×a≡
1(mo
dp
)a ^×a\equiv 1(modp)
ap−2×a
≡1(m
odp)
就發現了 ap−
2%
pa^ \% p
ap−2%p
是 aa
a 的乘法逆元,當p為質數
#include
#include
#include
#include
#include
#include
using
namespace std;
#define mod 998244353
inline
long
long
power
(long
long a,
long
long b,
long
long p)
//a^b mod p
return ans;
}long
long x[
2005
], y[
2005
], k, n;
long
long
lagrange
(long
long n,
long
long k)
} ans +
= y[i]
* up % mod *
power
(under, mod -
2, mod)
% mod;
ans %
= mod;
}return
(ans+mod)
%mod;
}int
main()
P4781 模板 拉格朗日插值
拉格朗日插值是一種能夠根據n個點 x i,y i 求出對應多項式的方法 定義拉格朗日插值的基函式 l i 為 l i prod n fracy i 容易發現這個函式的特點就是當 x x i 時,y y i 其他時候 y 0 所以最後插值出來的多項式就是這n個基函式求和 恰好在每個 x i 處取到 y...
P4781 模板 拉格朗日插值
給你 n 個點 第i個點的座標為 xi yi 一定會有乙個l x 滿足 經過這 n 個點 也就是 對於任意乙個xi,必定會有l xi yi 設l x y 1 l1 x y 2 l2 x y i l3 x y n ln x 其中 這樣 當x xi l x xi x 0,因為一定有一項 xi xi 為 ...
Luogu P4781 模板 拉格朗日插值
洛谷傳送門 這是一道模板題 由小學知識可知,n nn 個點 xi yi x i,y i xi y i 可以唯一地確定乙個多項式 現在,給定 n nn 個點,請你確定這個多項式,並將 k kk 代入求值 求出的值對 998244353 998244353 998244 353 取模 輸入格式 第一行兩...