拉格朗日插值
拉格朗日插值法简直就是懒人必备的推公式神器
以下用一个例子加以说明
我们假定所有人知道它可以用一个三次的公式表示
拉格朗日插值的用法就是用n+1个点来确定一个n次的函数解析式
我们假设f(x)可以写成以下的形式
其中
所以我们只需令
即可 然后我们将本式子带回
把值代入可得
读者可自行推导
以上便是对小学奥数的一个推导
习题:
int ksm(int a, int b) {
if (b == 0) return 1;
if (b == 1) return a;
int t = ksm(a, b / 2);
t = t * t % mod;
if (b % 2) t = t * a % mod;
return t;
}
int xh[N], x[N], y[N];
inline void init(int n) {
for (int i = 1 ; i <= n + 2 ; i ++)
x[i] = i, y[i] = (y[i - 1] + ksm(i, n)) % mod;
for (int i = 1 ; i <= n + 2 ; i ++) {
xh[i] = 1;
for (int j = 1 ; j <= n + 2 ; j ++)
if (i != j)
xh[i] = xh[i] * (x[i] - x[j]) % mod;
xh[i] = y[i] * ksm(xh[i], mod - 2) % mod;
}
}
inline int solve(int k, int n) {
int res = 0;
for (int i = 1 ; i <= n + 2 ; i ++) {
int u = xh[i];
for (int j = 1 ; j <= n + 2 ; j ++)
if (i != j)
u = u * ((k - x[j] + mod) % mod) % mod;
res = (res + u + mod) % mod;
}
return res;
}
solve用于求值,init用于预处理,xh中存系数(xh是喜欢而不是小花)
习题:P4593 [TJOI2018] 教科书般的亵渎
注:此为
接下来是形式化的用法
首先我们拥有
提出系数
以上代码中