洛谷 P4781 拉格朗日插值

2021-10-03 15:46:50 字數 2059 閱讀 6437

給出平面上 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 取模 輸入格式 第一行兩...