给定n,pn,p,求值:
[(i=1∑nj=1∑ni2j2)×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∑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∑ni2=6n×(n+1)×(2n+1)
把这个带入式子
[(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;
}