B Integration
Problem Description
链接:https://ac.nowcoder.com/acm/contest/881/B
来源:牛客网
Bobo knows that ∫ 0 ∞ 1 1 + x 2 d x = π 2 \int_{0}^{\infty} \frac{1}{1 + x^2}\ \mathrm{d}x = \frac{\pi}{2} ∫0∞1+x21 dx=2πGiven n n n distinct positive integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an, find the value of 1 π ∫ 0 ∞ 1 ∏ i = 1 n ( a i 2 + x 2 ) d x \frac{1}{\pi} \int_{0}^{\infty} \frac{1}{\prod_{i = 1}^n(a_i^2 + x^2)}\ \mathrm{d}x π1∫0∞∏i=1n(ai2+x2)1 dxIt can be proved that the value is a rational number p q \frac{p}{q} qp.
Print the result as ( p ⋅ q − 1 )   m o d   ( 1 0 9 + 7 ) (p \cdot q^{-1}) \bmod (10^9+7) (p⋅q−1)mod(109+7).Input
The input consists of several test cases and is terminated by end-of-file.
The first line of each test case contains an integer n n n.
The second line contains n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an.
- 1 ≤ n ≤ 1 0 3 1 \leq n \leq 10^3 1≤n≤103.
- 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1≤ai≤109.
- { a 1 , a 2 , … , a n } \{a_1, a_2, \dots, a_n\} {a1,a2,…,an} are distinct.
- The sum of n 2 n^2 n2 does not exceed 1 0 7 10^7 107.
Output
For each test case, print an integer which denotes the result.
Sample Input
1
1
1
2
2
1 2Sample Output
500000004
250000002
83333334
题意
已知公式 ∫ 0 ∞ 1 1 + x 2 d x = π 2 \int_{0}^{\infty} \frac{1}{1 + x^2}\ \mathrm{d}x = \frac{\pi}{2} ∫0∞1+x21 dx=2π现有 n n n个不同数数 a i a_i ai,求 ( p ⋅ q − 1 )   m o d   ( 1 0 9 + 7 ) (p \cdot q^{-1}) \bmod (10^9+7) (p⋅q−1)mod(109+7)的值,其中 1 π ∫ 0 ∞ 1 ∏ i = 1 n ( a i 2 + x 2 ) d x = p q \frac{1}{\pi} \int_{0}^{\infty} \frac{1}{\prod_{i = 1}^n(a_i^2 + x^2)}\ \mathrm{d}x = \frac{p}{q} π1∫0∞∏i=1n(ai2+x2)1 dx=qp
思路
捂脸,居然没有想到是裂项。以下为推导过程:
由于定积分具有性质 ∫ a b [ f ( x ) ± g ( x ) ] d x = ∫ a b f ( x ) d x ± ∫ a b g ( x ) d x \int_{a}^{b}[f(x) \pm g(x)]\ \mathrm{d}x = \int_{a}^{b}f(x)\ \mathrm{d}x \pm \int_{a}^{b}g(x)\ \mathrm{d}x ∫ab[f(x)±g(x)] dx=∫abf(x) dx±∫abg(x) dx
所以我们假设
1 ∏ i = 1 n ( a i 2 + x 2 ) = ∑ i = 1 n c i ( a i 2 + x 2 ) \frac{1}{\prod_{i = 1}^n(a_i^2 + x^2)} = \sum_{i = 1}^n\frac{c_i}{(a_i^2 + x^2)} ∏i=1n(ai2+x2)1=i=1∑n(ai2+x2)ci
将其约分得到
∑ i = 1 n c i ( a i 2 + x 2 ) = ∑ i = 1 n ( c i ∗ ∏ j = 1 , j 不 等 于 i n ( a j 2 + x 2 ) ) ∏ i = 1 n ( a i 2 + x 2 ) \sum_{i = 1}^n\frac{c_i}{(a_i^2 + x^2)} = \frac{\sum_{i = 1}^n(c_i*\prod_{j = 1,j不等于i}^n(a_j^2 + x^2))}{\prod_{i = 1}^n(a_i^2 + x^2)} i=1∑n(ai2+x2)ci=∏i=1n(ai2+x2)∑i=1n(ci∗∏j=1,j不等于in(aj2+x2))
   ⟹    1 ∏ i = 1 n ( a i 2 + x 2 ) = ∑ i = 1 n ( c i ∗ ∏ j = 1 , j 不 等 于 i n ( a j 2 + x 2 ) ) ∏ i = 1 n ( a i 2 + x 2 ) \implies\frac{1}{\prod_{i = 1}^n(a_i^2 + x^2)} =\frac{\sum_{i = 1}^n(c_i*\prod_{j = 1,j不等于i}^n(a_j^2 + x^2))}{\prod_{i = 1}^n(a_i^2 + x^2)} ⟹∏i=1n(ai2+x2)1=∏i=1n(ai2+x2)∑i=1n(ci∗∏j=1,j不等于in(aj2+x2))
   ⟹    ∑ i = 1 n ( c i ∗ ∏ j = 1 , j 不 等 于 i n ( a j 2 + x 2 ) ) = 1 \implies\sum_{i = 1}^n(c_i*\prod_{j = 1,j不等于i}^n(a_j^2 + x^2)) = 1 ⟹i=1∑n(ci∗j=1,j不等于i∏n(aj2+x2))=1
可以利用 n n n次上述公式,每一次令 x 2 = − a i 2 x^2 = -a_i^2 x2=−ai2,就可以得到(因为除去第i项,其他的 n − 1 n-1 n−1项中的 ( a j 2 + x 2 ) (a_j^2 + x^2) (aj2+x2)必定有一项为 ( a i 2 − a i 2 ) = 0 (a_i^2 - a_i^2) = 0 (ai2−ai2)=0,所以其他 n − 1 n-1 n−1项均可消去)
c i ∗ ∏ j = 1 , j 不 等 于 i n ( a j 2 − a i 2 ) = 1 c_i*\prod_{j = 1,j不等于i}^n(a_j^2 - a_i^2) = 1 ci∗j=1,j不等于i∏n(aj2−ai2)=1
   ⟹    c i = 1 ∏ j = 1 , j 不 等 于 i n ( a j 2 − a i 2 ) \implies c_i = \frac{1}{\prod_{j = 1,j不等于i}^n(a_j^2 - a_i^2)} ⟹ci=∏j=1,j不等于in(aj2−ai2)1
所以得出
原 式 = 1 π ∫ 0 ∞ 1 ∏ i = 1 n ( a i 2 + x 2 ) d x = 1 π ∑ i = 1 n ( c i ∗ ∫ 0 ∞ 1 ( a i 2 + x 2 ) d x ) 原式 = \frac{1}{\pi} \int_{0}^{\infty} \frac{1}{\prod_{i = 1}^n(a_i^2 + x^2)}\ \mathrm{d}x = \frac{1}{\pi}\sum_{i = 1}^n (c_i*\int_{0}^{\infty}\frac{1}{(a_i^2 + x^2)} \ \mathrm{d}x) 原式=π1∫0∞∏i=1n(ai2+x2)1 dx=π1i=1∑n(ci∗∫0∞(ai2+x2)1 dx)
将 ∫ 0 ∞ 1 ( a i 2 + x 2 ) d x = π 2 a i 代 入 将\int_{0}^{\infty}\frac{1}{(a_i^2 + x^2)}\ \mathrm{d}x = \frac{\pi}{2a_i}代入 将∫0∞(ai2+x2)1 dx=2aiπ代入
   ⟹    原 式 = ∑ i = 1 n c i 2 a i = ∑ i = 1 n 1 2 a i ∗ ∏ j = 1 , j 不 等 于 i n ( a j 2 − a i 2 ) \implies 原式 = \sum_{i = 1}^n\frac{c_i}{2a_i} = \sum_{i = 1}^n\frac{1}{2a_i*\prod_{j = 1,j不等于i}^n(a_j^2 - a_i^2)} ⟹原式=i=1∑n2aici=i=1∑n2ai∗∏j=1,j不等于in(aj2−ai2)1
代码
#include <bits/stdc++.h>
#define pi acos(-1.0)
#define ll long long
#define esp 1e-9
#define inf 0x3f3f3f3f
using namespace std;
const ll N = 1e3+5, mod = 1e9+7;
ll n, ans, a[N];
ll qmod(ll a, ll b){//快速幂
ll ans = 1;
a %= mod;
while (b){
if(b & 1){
ans = ((ans%mod)*(a%mod))%mod;
}
a = ((a%mod)*(a%mod))%mod;
b >>= 1;
}
return ans%mod;
}
ll inv(ll a){//逆元
return qmod(a, mod-2)%mod;
}
int main(){
ios::sync_with_stdio(false);
while (cin>>n){
ans = 0;
for (ll i = 1; i <= n; i++){
cin>>a[i];
}
for (ll i = 1; i <= n; i++){
ll t = 1;
for (ll j = 1; j <= n; j++){//计算c_i
if (j != i){
ll tt = ((a[j]*a[j]-a[i]*a[i])%mod+mod)%mod;
t = ((t%mod)*(tt%mod))%mod;
}
}
t = (((2*a[i])%mod)*(t%mod))%mod;
ans = (ans%mod+inv(t)%mod)%mod;
}
cout<<ans%mod<<endl;
}
return 0;
}