拉格朗日插
拉格朗日插
拉格朗日插值:给定
正确性可以通过带入 小学数学知识。
cin >> n >> k, --n;
up(i,0,n) cin >> x[i] >> y[i];
up(i,0,n) up(j,0,n) inv[i][j]=ksm(x[i]-x[j],P-2);
up(i,0,n) {
int mul=y[i];
up(j,0,n) if(i^j) mul=mul*(k-x[j])%P*inv[i][j]%P;
f=(f+mul)%P;
}
cout << (f%P+P)%P;
连续取值的拉格朗日插
连续取值的拉格朗日插:
考虑处理
k 次幂和
观察可得 证明本来想要因为我又菜又笨又懒就算了,啊啊啊看官见笑了呜呜呜诶诶诶诶诶诶(
inv[0]=inv[1]=mul[0]=1;
up(i,2,2e6) inv[i]=inv[P%i]*(P-P/i)%P;
up(i,1,2e6) mul[i]=mul[i-1]*inv[i]%P;
cin >> n >> k, pre[0]=n, suf[k+1]=n-k-1;
up(i,1,k+1) pre[i]=pre[i-1]*(n-i)%P;
dn(i,k, 0) suf[i]=suf[i+1]*(n-i)%P;
up(i,0,k+1) {
y=(y+ksm(i,k))%P;
int qwq=((k+i)&1)?y:-y;
if(i>0) qwq=qwq*pre[i-1]%P*mul[i]%P;
if(i<k+1) qwq=qwq*suf[i+1]%P*mul[k+1-i]%P;
out=(out+qwq)%P;
}
cout << (out+P)%P;
重心拉格朗日插
其实就是这样子求值快一点点。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步