50求调
查看原帖
50求调
1218495
YZren楼主2025/7/29 19:44
#include<bits/stdc++.h>
#define int long long
#define f(i,j,k) for(int i=j;i<=k;i++)
#define F(i,j,k) for(int i=j;i>=k;i--)
#define min(x,y) (x<y?x:y)
char Buf[1<<23],*P1=Buf,*P2=Buf;
#define getchar() (P1==P2&&(P2=(P1=Buf)+fread(Buf,1,1<<23,stdin),P1==P2)?EOF:*P1++)
const int maxn=3e5+10,inf=19940417,inv6=3323403,inv2=9970209;
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*10+ch-48;ch=getchar();}
	return x*f;
}
inline void write(int x){
	if(x<0) {x=~(x-1); putchar('-');}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
int n=read(),m=read(),ans1=n*n%inf,ans2=m*m%inf,ans3,tmp1,tmp2;
inline int getsqrt(int x){return x*(x+1)%inf*(2*x+1)%inf*inv6%inf;}
inline int sum(int l,int r){return (r-l+1)*(r+l)%inf*inv2%inf;}
inline int ans(int l,int r){return ((getsqrt(r)-getsqrt(l-1))%inf+inf)%inf;}
inline void work(){
	if(n>m) std::swap(n,m);
	for(int l=1,r;l<=n;l=r+1){
		r=min(n,n/(n/l));
		ans1=((ans1-(n/l)*sum(l,r)%inf)%inf+inf)%inf;
	}
	for(int l=1,r;l<=m;l=r+1){
		r=min(m,m/(m/l));
		ans2=((ans2-(m/l)*sum(l,r)%inf)%inf+inf)%inf;
	}
	ans3=((ans1*ans2%inf-n*n%inf*m%inf)%inf+inf)%inf;
	for(int l=1,r;l<=n;l=r+1){
		r=min(n/(n/l),m/(m/l));
		int b=sum(l,r)*(n*(m/l)%inf+m*(n/l)%inf)%inf;
		int c=ans(l,r)*(m/l)%inf*(n/l)%inf;
		ans3=(ans3+b-c+inf)%inf;
	}
	write((ans3%inf+inf)%inf);
}
signed main(){work();return 0;}
2025/7/29 19:44
加载中...