链接:https://ac.nowcoder.com/acm/contest/881/B
题意:给出n,和数组a[n],求特定表达式取模后的值。
思路:用到列项相消:
那么,,然后就变成了求和问题,利用费马小定理求逆元可计算得到结果。
AC代码:
#include<cstdio> using namespace std; const int MOD=1e9+7; typedef long long LL; int n; LL a[1005],c[1005]; LL ans; LL qpow(LL a,LL b){ LL res=1; while(b){ if(b&1) res=res*a%MOD; a=a*a%MOD; b>>=1; } return res; } int main(){ while(~scanf("%d",&n)){ for(int i=1;i<=n;++i) scanf("%lld",&a[i]),c[i]=1; ans=0; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(j!=i) c[i]=c[i]*((a[j]*a[j]%MOD-a[i]*a[i]%MOD+MOD)%MOD)%MOD; for(int i=1;i<=n;++i) ans=(ans+qpow(2*a[i]%MOD*c[i]%MOD,MOD-2))%MOD; printf("%lld\n",ans); } return 0; }
转载于:https://www.cnblogs.com/FrankChen831X/p/11213135.html