本题也可以用 完全平方公式!!!
咳咳,先从一个简单的例子入手:
在 1 1 1, 2 2 2, 3 3 3, 4 4 4, 5 5 5, 6 6 6, 7 7 7, 8 8 8, 9 9 9, 10 10 10 这些正整数中每两个数相乘的乘积之和是多少?
我们都知道这十个数两两相乘的乘积有
C
10
2
=
45
C_{10}^2=45
C102=45 个,有多项式:
(
1
+
2
+
3
+
⋯
+
9
+
10
)
2
−
(
1
2
+
2
2
+
3
2
+
⋯
+
9
2
+
1
0
2
)
2
\frac{(1+2+3+ \cdots +9+10)^2-(1^2+2^2+3^2+ \cdots +9^2+10^2)}{2}
2(1+2+3+⋯+9+10)2−(12+22+32+⋯+92+102)
为这十个数两两相乘的乘积之和。
- 为什么?
先看一下下面的算式:
(
1
+
2
+
3
+
⋯
+
9
+
10
)
2
(1+2+3+ \cdots +9+10)^2
(1+2+3+⋯+9+10)2
由完全平方公式展开后为:
( 1 2 + 2 2 + 3 2 + ⋯ + 9 2 + 1 0 2 ) + 2 × ( 1 × 2 + 1 × 3 + ⋯ 9 × 10 ) (1^2+2^2+3^2+ \cdots +9^2+10^2)+2 \times (1 \times 2+1 \times 3+ \cdots 9 \times 10) (12+22+32+⋯+92+102)+2×(1×2+1×3+⋯9×10)
不难发现多项式 ( 1 × 2 + 1 × 3 + ⋯ 9 × 10 ) (1 \times 2+1 \times 3+ \cdots 9 \times 10) (1×2+1×3+⋯9×10) 正是要求的答案!
易得:
( 1 × 2 + 1 × 3 + ⋯ 9 × 10 ) = ( 1 + 2 + 3 + ⋯ + 9 + 10 ) 2 − ( 1 2 + 2 2 + 3 2 + ⋯ + 9 2 + 1 0 2 ) 2 (1 \times 2+1 \times 3+ \cdots 9 \times 10)=\frac{(1+2+3+ \cdots +9+10)^2-(1^2+2^2+3^2+ \cdots +9^2+10^2)}{2} (1×2+1×3+⋯9×10)=2(1+2+3+⋯+9+10)2−(12+22+32+⋯+92+102)
那么本题的公式就是:
( a 1 + a 2 + a 3 + ⋯ + a n − 1 + a n ) 2 − ( a 1 2 + a 2 2 + a 3 2 + ⋯ + a n 2 ) 2 \frac{(a_1+a_2+a_3+ \cdots +a_{n-1}+a_n)^2-({a_1}^2+{a_2}^2+{a_3}^2+ \cdots +{a_n}^2)}{2} 2(a1+a2+a3+⋯+an−1+an)2−(a12+a22+a32+⋯+an2)
最后送上代码!
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,x,mul=0,sum=0;
//mul:和的平方
//sum:平方的和
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
sum+=(x*x);
mul+=x;
}
cout<<(mul*mul-sum)/2;
return 0;
}