2019牛客暑期多校训练营(第一场) B.Integration

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} 01+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 π10i=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) (pq1)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 1n103.
  • 1 ≤ a i ≤ 1 0 9 1 \leq a_i \leq 10^9 1ai109.
  • { 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 2

Sample 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} 01+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) (pq1)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} π10i=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=1n(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=1n(ai2+x2)ci=i=1n(ai2+x2)i=1n(cij=1,jin(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(cij=1,jin(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=1n(cij=1,jin(aj2+x2))=1
可以利用 n n n次上述公式,每一次令 x 2 = − a i 2 x^2 = -a_i^2 x2=ai2,就可以得到(因为除去第i项,其他的 n − 1 n-1 n1项中的 ( 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 (ai2ai2)=0,所以其他 n − 1 n-1 n1项均可消去)
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 cij=1,jin(aj2ai2)=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,jin(aj2ai2)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) =π10i=1n(ai2+x2)1 dx=π1i=1n(ci0(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=1n2aici=i=1n2aij=1,jin(aj2ai2)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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值