【P2260 [清华集训2012]模积和】题解

题目地址

题目

i=1nj=1m(nmodi)×(mmodj),ij

mod 19940417 的值

image

思路

nm

i=1n(nmodi)×j=1m(mmodj)i=1n(nmodi)(mmodi)

前面那两坨就是个数论分块板子,后面那块拆一下:

i=1n(nmmi×inni×im+mi×ni×i2)

这里还是可以数论分块,每次块的 r 可以取 min(ml,nl)

然后还有几个难点

  1. 后面那坨鬼东西乘 i2,众所周知二次方和公式 i=1ni2=n(n+1)(2n+1)6

  2. 然后上面那个鬼公式因为上面三个乘起来会爆所以要用逆元

  3. 然后因为↑↓出题人模数不是质数不能用费马只能老老实实打拓欧

Code

// Problem: P2260 [清华集训2012]模积和
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P2260
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
//#define M
#define mo 19940417
//#define N
int n, m, i, j, k, T; 
int ans, l, r, P; 

int kuai(int a, int b)
{
	int ans=1; 
	while(b)
	{
		if(b&1) ans*=a; 
		a*=a; b>>=1; 
		ans%=mo; a%=mo; 
	}
	return ans; 
}

void exgcd(int a, int b, int &x, int &y)
{
	if(b==0) x=1, y=0; 
	else
	{
		exgcd(b, a%b, x, y); 
		int z=y; 
		y=x-a/b*y; 
		x=z; 
	}
}

int calc(int n)
{
	int ans=n*n%mo, l, r; 
	for(l=1; l<=n; l=r+1)
	{
		r=min(n, n/(n/l)); 
		ans-=(l+r)*(r-l+1)/2%mo*(n/l)%mo; 
		ans%=mo; 
	}
	return ans; 
}

int sim(int n)
{
	return n*(n+1)%mo*(2*n+1)%mo*P%mo; 
}

int suan(int l, int r)
{
	return (sim(r)-sim(l-1))%mo; 
}

signed main()
{
//	freopen("tiaoshi.in", "r", stdin); 
//	freopen("tiaoshi.out", "w", stdout); 
	exgcd(6, mo, P, T); 
	n=read(); m=read(); 
	if(n>m) swap(n, m); 
	ans=calc(n)*calc(m)%mo; 
	for(l=1; l<=n; l=r+1)
	{
		r=min({n, n/(n/l), m/(m/l)}); 
		ans-=(r-l+1)*n%mo*m%mo; 
		ans+=(l+r)*(r-l+1)/2%mo*n%mo*(m/l)%mo; 
		ans+=(l+r)*(r-l+1)/2%mo*m%mo*(n/l)%mo; 
		ans-=(m/l)*(n/l)%mo*suan(l, r)%mo;  
		ans=(ans%mo+mo)%mo;
	}
	printf("%lld\n", ans); 
	return 0; 
}

总结

本题考察一下知识点;

  1. 式子化简(是个人都会)
  2. 数论分块(在学,这几天做个笔记)和其拓展应用(如本题)
  3. 二次和公式(以前用过,但忘了)
  4. 拓欧求逆元(学了又忘,再学又忘,还是要靠推)
posted @   zhangtingxi  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示