版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Game_Acm/article/details/82216311
拉格朗日根本公式:y=Σ(i=0->n-1)[yk*∏(j!=k)(x-xj)][∏(j!=k)(xj-xk)]
拉格朗日插值法求:Σ(i=1->n)ik
拉格朗日插值法公式:f(n)=Σ(i=1->k+2)(-1)k-i+2f(i)[Σ(j=1->k+2)(n-j)]/[(n-i)*(i-1)!*(k+2-i)!]
int f[maxn],fac[maxn];
int Qpow( int a , int b )
{
int res = 1;
while ( b )
{
if ( b&1 )
res = 1LL*res*a%mod;
a = 1LL*a*a%mod;
b = b>>1;
}
return res;
}
void slove( int n , int k )
{
for ( int i=1 ; i<=k+2 ; i++ )
f[i] = (f[i-1]+Qpow(i,k))%mod;
if ( n<=k+2 )
printf ( "%d\n" , f[n] );
else
{
fac[0] = 1;
for ( int i=1 ; i<=k+2 ; i++ )
fac[i] = 1LL*i*fac[i-1]%mod;
int cur = 1,ans = 0;
for ( int i=1 ; i<=k+2 ; i++ )
cur = 1LL*cur*(n-i)%mod;
for ( int i=1 ; i<=k+2 ; i++ )
{
int inv1 = Qpow( n-i , mod-2 );
int inv2 = Qpow( 1LL*fac[i-1]*fac[k+2-i]%mod , mod-2 );
int sign = (k+2-i)%2?-1:1;
ans = (ans+1LL*sign*inv1*inv2%mod*f[i]%mod*cur%mod)%mod;
ans = (ans+mod)%mod;
}
printf ( "%d\n" , ans );
}
}