给定n,pn,p,求值:
[ ( ∑ i = 1 n ∑ j = 1 n i 2 j 2 ) × 36 ] m o d p [ (\sum_{i=1}^n \sum_{j=1}^n i^2 j^2 ) \times 36 ]mod \ p [(i=1∑nj=1∑ni2j2)×36]mod p
让大家接触提前接触一下数论
[ ( ∑ i = 1 n ∑ j = 1 n i 2 j 2 ) × 36 ] m o d p [ (\sum_{i=1}^n \sum_{j=1}^n i^2 j^2 ) \times 36 ]mod \ p [(i=1∑nj=1∑ni2j2)×36]mod p
这道题的意思是什么呢?
我相信我打一个暴力大家也懂了
#include<bits/stdc++.h>
using namespace std;
int n,s=0,x;
int main(){
cin>>n>>x;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
s+=i*i+j*j;
s*=36;
s%=x;
cout<<s;
return 0;
}
这样写,大概能得30
分
这不就是平方和吗,每个数的平方算了2n
次
[
(
∑
i
=
1
n
i
2
×
2
n
)
×
36
]
m
o
d
p
[ (\sum_{i=1}^n i^2 \times 2n ) \times 36 ] \bmod \ p
[(i=1∑ni2×2n)×36]mod p
#include<bits/stdc++.h>
using namespace std;
int n,s=0,x;
int main(){
cin>>n>>x;
for(int i=1;i<=n;i++)s+=i*i*n*2;
s%=x;
s*=36;
s%=x;
cout<<s;
return 0;
}
这样写大概能得50
分
我们继续推
我们知道
∑ i = 1 n i 2 = n × ( n + 1 ) × ( 2 n + 1 ) 6 \sum_{i=1}^n i^2=\dfrac{n \times (n+1) \times (2n+1)}{6} i=1∑ni2=6n×(n+1)×(2n+1)
把这个带入式子
[ ( ∑ i = 1 n i 2 × 2 n ) × 36 ] m o d p = [ ( n × ( n + 1 ) × ( 2 n + 1 ) 6 × 2 n ) × 36 ] m o d p = [ n × ( n + 1 ) × ( 2 n + 1 ) × n × 12 ] m o d p = { [ n × ( n + 1 ) × ( 2 n + 1 ) ] 2 } m o d p [ (\sum_{i=1}^n i^2 \times 2n ) \times 36 ] \bmod \ p \\ = [ (\dfrac{n \times (n+1) \times (2n+1)}{6} \times 2n ) \times 36 ] \bmod \ p \\= [n \times (n+1) \times (2n+1) \times n \times 12 ] \bmod \ p \\ = \{[ n \times (n+1) \times (2n+1)]^2 \} \bmod \ p [(i=1∑ni2×2n)×36]mod p=[(6n×(n+1)×(2n+1)×2n)×36]mod p=[n×(n+1)×(2n+1)×n×12]mod p={[n×(n+1)×(2n+1)]2}mod p
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,p;
cin>>n>>p;
long long ans=n;
ans*=n+1;
ans%=p;
ans*=2*n+1;
ans%=p;
ans*=ans;
ans%=p;
cout<<ans;
return 0;
}