求助, 没过样例
查看原帖
求助, 没过样例
530349
天空即为极限楼主2022/5/13 23:22
#include<bits/stdc++.h>
#define int long long
#define inv 3323403
#define inv2 9970209
#define mod 19940417
using namespace std;
char user;
template <typename T> inline void read(T &x){
	char ch = getchar(); T f = 1; x = 0;
	for(; (!isdigit(ch)) and ch != '-'; ch = getchar());
	if(ch == '-') f = -1, ch = getchar();
	for(; isdigit(ch); x = (x << 3) + (x << 1) + ch - 48, ch = getchar());
	x *= f;
}
template<typename T, typename ...Arg>void read(T &x, Arg& ...arg){
	read(x);
	read(arg...);
}
											   
template <typename T>void write(T x){
	if(x < 0) putchar('-'), x = -x;
	if(x > 9) write(x / 10);
	putchar(x % 10 + '0');    
}
																  
template <typename T, typename ...Arg> void write(T x, Arg ...arg){
	write(x);
	putchar(user);
	write(arg...);
}
const int N = 5e5 + 5;
//---------------------------------------------------------------
	int MOD(int x){
		return ((x % mod) + mod) % mod;
	}									
	int function1(int n, int m){
		int L = 1, R = 0, ans = 0;
		for(; L <= m; L = R + 1){
			R = min(m, n / (n / L));
			ans = MOD(ans + MOD(MOD(MOD((R - L + 1) * (R + L)) * inv2) * (n / L)));
		}
		return ans;
	}
	int pre_function(int L, int R){
		int ans = MOD(MOD(MOD((R + 1) * (2 * R + 1)) * R) * inv);
		int ans2 = MOD(MOD(MOD((L + 1) * (2 * L + 1)) * L) * inv);
		return MOD(ans - ans2);
	}
	int function2(int n, int m){
		int up = min(n, m), L = 1, R = 0, ans = 0;
		for(; L <= up; L = R + 1){
			R = min(up, min(n / (n / L), m / (m / L)));
			ans = MOD(ans + MOD(MOD(pre_function(L, R) * (n / L)) * (m / L)));
		}
		return ans;
	}
//---------------------------------------------------------------
signed main(signed agrc, char const *argv[]){

//---------------------------------------------------------------
	int n, m; read(n, m);
	int front = MOD(MOD(MOD(n * n) - MOD(function1(n, n))) * MOD(MOD(m * m) - MOD(function1(m, m))));
	int down1 = MOD(MOD(MOD(MOD(n * m) * min(n, m)) - MOD(m * function1(n, min(n, m)))) - MOD(n * function1(m, min(n, m))));
	int down2 = function2(n, m);
	write(down1);putchar('\n');
	write(MOD(front - MOD(down1 + down2)));									 
//---------------------------------------------------------------

	return 0;
}

2022/5/13 23:22
加载中...