题目链接:B.ntegration
题目大意:已知,计算。
思路:考虑到在《信号与系统》这门课中才学过
其中
而在本题中就可令
即原式等=。
其中
接下来就是求逆元得操作,代码里看
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
typedef long long ll;
using namespace std;
#define INF 0x3f3f3f3f
const int mod=1e9+7;
const int maxn=1e3+10;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
int n;
ll a[maxn];
//int inv(int t,int p){return t==1?1:(p-p/t)*inv(p%t,p)%p;}
ll pow_mod(ll a,ll b,ll p){
ll res=1;
while(b){
if(b&1)res=(res*a)%p;
a=(a*a)%p;
b>>=1;
}
return res;
}
ll fermat(ll a,ll p){
return pow_mod(a,p-2,p);
}
int main()
{
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
ll ans=0;
for(int i=1;i<=n;i++){
ll k=1;
for(int j=1;j<=n;j++){
if(i==j)continue;
k=k*((a[j]*a[j]-a[i]*a[i])%mod+mod)%mod;
}
k=fermat(k,mod);
k=k*fermat(a[i]*2,mod)%mod;
ans=(ans+k)%mod;
}
printf("%lld\n",ans );
}
return 0;
}
据说还有复变函数里留数的做法(凭借我学复变的记忆貌似原理差不多),还有神人matlab解方程···
通过这道题也算复习了一下高数知识。