【BZOJ】【P2956】【模积和】【题解】【数学】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2956

由于latex挂了就懒得写题解了,水题……

Code:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL MOD=19940417;
LL n,m,sqn,sqm,ans,res;
LL power(LL x,LL k,LL p){
	LL ans=1;
	for(;k;k>>=1){
		if(k&1)ans=(ans*x)%p;
		x=(x*x)%p;
	}return ans;
}
LL inv2,inv6;
LL sum(LL n){
	return n*(n+1)%MOD*(2*n+1)%MOD*3323403%MOD;
}
LL F(LL n,LL m){
	LL ans=0;
	for(LL i=1,j;i<=n;i=j+1){
		j=min(n,m/(m/i));
		ans+=(m/i)*(i+j)%MOD*(j-i+1)%MOD*9970209%MOD; 
		ans%=MOD;
	}return ans;
}
int main(){
	cin>>n>>m;if(n>m)swap(n,m);
	ans=(n*n-F(n,n))%MOD*((m*m-F(m,m))%MOD);
	ans+=-n*n%MOD*m%MOD+F(n,m)*n%MOD+F(n,n)*m%MOD; 	
	ans%=MOD;
    for(LL i=1,j;i<=n;i=j+1){  
        j=min(m,min(n/(n/i),m/(m/i)));  
        ans+=-(n/i)*(m/i)%MOD*((sum(j)-sum(i-1))%MOD)%MOD;  
        ans%=MOD;  
    }while(ans<0)ans+=MOD;
    cout<<ans%MOD<<endl;
	return 0;
}


你可能感兴趣的:(bzoj)