拉格朗日插值法

2021-09-28 17:41:26 字數 1827 閱讀 1077

當 x 的取值不一定是 1-n 連續的時候,我們只能 o(n²) 地插出結果

洛谷 p4781

#include#define ll long long

using namespace std;

const int n=2e3+10;

const int mod=998244353;

int x[n],y[n];

ll quick_pow(ll a,ll b)

a = a * a % mod;

b >>= 1;

} return ans;

}ll lagrange(int n, int *x, int *y, int xi)

ans = (1ll*ans+1ll*y[i]*s1%mod*quick_pow(s2, mod-2)%mod)%mod;

}//我也不知道為什麼這裡能直接費馬小定理求逆元……

return (ans+mod)%mod;

}int main()

printf("%lld\n",lagrange(t,x,y,n));

return 0;

}

博主智障,忘記mod是乙個質數,所有數都與質數互質……

當 x 的取值確定是從1-n 連續的時候,我們可以對式子進行優化,之後 o(n) 即可求出答案

2019 icpc 南昌 b

#include#define ll long long

using namespace std;

const int maxn=1005;

const int mod=9999991;

int t,n,m;

ll a[maxn],inv[mod+5],finv[maxn];

ll sum[maxn],ans;

ll qpow(ll a,ll b)

return res;

}void init()

ll cal(ll x,ll *a,ll up)

return res;

}int main()

a[n+1]=cal(n+1,a,n);

sum[0]=a[0];

for(int i=1; i<=n+1; ++i)

sum[i]=(sum[i-1]+a[i])%mod;

while(m--)

if(l-1<=n+1)

ans=(cal(r,sum,n+1)-sum[l-1]+mod)%mod;

else

ans=(cal(r,sum,n+1)-cal(l-1,sum,n+1)+mod)%mod;

printf("%lld\n",ans);

} }return 0;

}

cf622f : 該問題是乙個經典問題,自然冪級數的字首和

#include#define ll long long

using namespace std;

const int maxn=1e6+10;

const int mod=1e9+7;

int n,m;

ll a[maxn+100],inv[maxn+100],finv[maxn+100];

ll qpow(ll a,ll b)

return res;

}void init()

ll cal(ll x,ll *a,ll up)

return res;

}int main()

if(n<=m+2) else

return 0;

}

拉格朗日插值法

拉格朗日插值法 拉格朗日插值法可以幫助我們解決以下的問題 已知x取值0,1,1,2時,f取值2,2,0,6 求x 3時f的值。示例1 intxs intys f 3 intval lagrangepolynomial 3,xs,ys staticint lagrangepolynomial intx...

拉格朗日插值法

模板題 給出n nn個點 xi yi x i,y i xi y i 讓你確定這個n 1 n 1n 1次方程並代入求值 這個有三種求法 第一種是差分法,只適用於xi ix i i xi i的情況,就是不斷做差分直到序列變成乙個定值就可以求出所有項的係數,複雜度o n 2 o n 2 o n2 第二種是...

拉格朗日插值法

function p lagrange x,y p lagrange x,y 其中x和y是向量,p是返回的多項式向量 m獲取x的個數 m length x for k 1 1 m 表示乙個插值函式的起始值 v 1 for i 1 1 m if k i 注意 以後凡是在遇到乙個在數學上是 x 1 等包...