洛谷原题:https://www.luogu.com.cn/problem/P4781
有几个问题,第28行为什么需要pow(P-2,b)%P?b不是作为拉格朗日插值法基函数的分母吗,这么写的意义是什么?
以及该如何修改才能通过样例?修改了一晚上无果,谢谢。
我的代码(改题解的代码改的):
#include
#include
#include
#define P 998244353
using namespace std;
int n,k;
int a,b,ans;
int x[2005],y[2005];
int pow(int k,int n){
int r=1;
for(;k;k>>=1,n=n*n%P)if(k&1)r=r*n%P;
return r;
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>x[i]>>y[i];
for(int i=1;i<=n;i++){
a=y[i]%P ;
b=1;
for(int j=1;j<=n;j++){
if(i==j)continue;
a=a*(k-x[j])%P;
b=b*(x[i]-x[j])%P;
}
ans=(ans+a*pow(P-2,b)%P)%P;
}
cout<<(ans+P)%P;
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:函数名:pow
功能:指数函数(x的y次方)
用法:double pow(double x, double y);
示例代码:
/*
作者:AT阿宝哥
日期:2016年9月18日
愿景:参考官方资料,做最好的课程,成就更多职业人!
邮箱:12264104@qq.com
CSDN:https://blog.csdn.net/goldentec
简书:https://www.jianshu.com/u/8a6075d7a2e0
说明:
注意:
*/
#include <math.h>
#include <stdio.h>
int main(void)
{
double x = 2.0, y = 3.0;
printf("%lf raised to %lf is %lf\n", x, y, pow(x, y));
return 0;
}