(a[i] - a[x]) * (a[i] - a[x]) = a[i] * a[i] - 2 * a[i]* a[x] + a[x] * a[x]
所以里面一共就有(n - 1)个a[i]的平方,中间这部分减法就是2 * (sum - a[i]) * a[i], sum即是所有数字的和。
然后举个简单例子就能发现最后的答案为n倍的平方和-和的平方
a b c
(a-b)(a-b)+(a-c)(a-c)+(b-c)(b-c)
2a
a+2bb+2cc-(ab+ac)-(ab+bc)-(ac+bc)
=2aa+2bb+2cc-(sum-a)a-(sum-b)b-(sum-c)c
=2aa+2bb+2cc-(a+b+c)sum+aa+bb+cc
=3(aa+bb+cc)-sumsum
同时注意
保证取模后的结果为正数:
((x % MOD) + MOD) % MOD

#include<bits/stdc++.h>
using namespace std;
long long a[500005];
int n;
int mod=1e9+7;
long long ans=0;
int main()
{
    scanf("%d",&n);
    long long sum=0;
    for(int i=0;i<n;i++)
    {
        scanf("%lld",&a[i]);
        sum=(sum+a[i])%mod;//sum为这n个数字的和
        ans=(ans+a[i]*a[i]%mod)%mod;//ans为这n个数字的平方和
    }
    ans=(n*ans%mod-sum*sum%mod+mod)%mod; //答案便是n倍的平方和-和的平方

    printf("%lld\n",ans);
}