ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

luogu P2260 [清华集训2012]模积和 |数论分块

2022-01-13 20:35:21  阅读:164  来源: 互联网

标签:cal return int luogu P2260 模积 ans include mod


题目描述

\(\sum_{i=1}^{n} \sum_{j=1}^{m} (n \bmod i) \times (m \bmod j), i \neq j\) mod 19940417 的值

输入格式

输入只有一行两个整数 \(n\),\(m\)。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define int long long
const int mod=19940417;
inline int ksm(int x,int y){
	int ans=1;
	while(y){
		if(y&1)ans=ans*x%mod;
		x=x*x%mod; y>>=1;
	}
	return ans;
}
inline int sum1(int p,int q){
	return (((q+p)*(q-p+1))>>1 )%mod;
}
int inv=ksm(6,17091779);
inline int sum2(int x){
	return (x*(x+1))%mod*(2*x+1)%mod*inv%mod;
}
int cal(int n){
	int ans=0;
	for(int l=1,r=0;l<=n;l=r+1){
		r=n/(n/l);
		ans=(ans+ n*(r-l+1)%mod -sum1(l,r)*(n/l)%mod +mod )%mod;
	}
	return ans;
}

signed main(){
	int n,m;
	cin>>n>>m;
	int ans=cal(n)*cal(m)%mod;
	if(n>m)swap(n,m);

	for(int l=1,r=0;l<=n;l=r+1){
		r=min(n/(n/l),m/(m/l));
		int op1=(n/l),op2=(m/l);
		ans=(ans- (n*m%mod*(r-l+1))%mod+mod)%mod;
		ans=(ans- op1*op2%mod*(sum2(r)-sum2(l-1)+mod)%mod+mod)%mod;
		ans=(ans+ (op1*m%mod+op2*n%mod)*sum1(l,r)%mod)%mod;
	}
	
	cout<<(ans%mod+mod)%mod<<endl;
}

标签:cal,return,int,luogu,P2260,模积,ans,include,mod
来源: https://www.cnblogs.com/naruto-mzx/p/15799535.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有