30分找不到问题求救
查看原帖
30分找不到问题求救
542478
jyhandhispuren楼主2022/8/3 12:13
#include<iostream>
using namespace std;
long long n,m;
long long l=1,r,ans1,ans2,ans3;
const long long p=19940417,inv2=9970209,inv6=3323403;
long long sum1(long long x){
	return x*(x+1)%p*inv2%p;
}
long long sum2(long long x){
	return x*(x+1)%p*(2*x+1)*inv6%p;
}
int main(){
	scanf("%lld%lld",&n,&m);
	if(n>m){
		swap(n,m);
	}
	l=1;
	ans1=n*n%p;
    while(l<=n){
    	if(n/l==0) break;
        r=n/(n/l);
        ans1=(ans1-(sum1(r)-sum1(l-1)+p)%p*(n/l)%p+p)%p;
        l=r+1;
	}
	l=1;
	ans2=m*m%p;
	while(l<=m){
		if(m/l==0) break;
		r=m/(m/l);
		ans2=(ans2-(sum1(r)-sum1(l-1)+p)%p*(m/l)%p+p)%p;
        l=r+1;
	}
	l=1;
	while(l<=n){
		if(n/l==0||m/l==0) break;
		r=min(m/(m/l),n/(n/l));
		long long a=(r-l+1)*n%p*m%p;
		long long b=(sum1(r)-sum1(l-1)+p)%p*((n/l)*m%p+(m/l)*n%p)%p;
		long long c=(sum2(r)-sum2(l-1)+p)%p*(n/l)%p*(m/l)%p;
		ans3=(ans3+a-b+c+p)%p;
		l=r+1;
	}
	long long ans4=(ans1*ans2%p-ans3)%p;
	cout<<ans4;
	return 0;
}
2022/8/3 12:13
加载中...