简单数论的题解

给定n,pn,p,求值:

[(i=1nj=1ni2j2)×36]mod p[ (sum_{i=1}^n sum_{j=1}^n i^2 j^2 ) imes 36 ]mod p

让大家接触提前接触一下数论

[(i=1nj=1ni2j2)×36]mod p [ (sum_{i=1}^n sum_{j=1}^n i^2 j^2 ) imes 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=1ni2×2n)×36]mod p [ (sum_{i=1}^n i^2 imes 2n ) imes 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=1ni2=n×(n+1)×(2n+1)6 sum_{i=1}^n i^2=dfrac{n imes (n+1) imes (2n+1)}{6}

把这个带入式子

[(i=1ni2×2n)×36]mod p=[(n×(n+1)×(2n+1)6×2n)×36]mod p=[n×(n+1)×(2n+1)×n×12]mod p={[n×(n+1)×(2n+1)]2}mod p [ (sum_{i=1}^n i^2 imes 2n ) imes 36 ] mod p \ = [ (dfrac{n imes (n+1) imes (2n+1)}{6} imes 2n ) imes 36 ] mod p \= [n imes (n+1) imes (2n+1) imes n imes 12 ] mod p \ = {[ n imes (n+1) imes (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;
}
原文地址:https://www.cnblogs.com/zhaohaikun/p/12816953.html