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

题目描述

i=1nj=1m(nmodi)×(mmodj),ij mod 19940417 的值

输入格式

输入只有一行两个整数 nm

#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;
}
posted @   白木偶君  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2020-01-13 luogu P4366 [Code+#4]最短路 |最短路
2020-01-13 luogu AT2300 Snuke Line |树状数组
点击右上角即可分享
微信分享提示