wxyww

一个OIER

我们要有最朴素的生活,与最遥远的梦想。即使明日天寒地冻,路远马亡。


luogu1829 Crash的数字表格

题目链接

problem

给出$n,m(n,m\le10^7)$,求$\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)$

$lcm(i,j)$表示i和j的最小公倍数

solution

设$n\le m$

令$t=dx$

原式=$\sum\limits_{t=1}^n\sum\limits_{k t}k^2\mu(k)\frac{t}{k}\sum\limits_{i=1}^{\lfloor\frac{n}{t}\rfloor}i\sum\limits_{j=1}^{\lfloor\frac{m}{t}\rfloor}j$
发现后面的两个$\sum$都可以$O(1)$计算。然后就是如何处理前面$\sum\limits_{k t}k^2\mu(k)\frac{t}{k}$的问题了。

显然$k^2\mu(k)$是积性函数,设$f(n)=n^2\mu(n)$。那么前面这一块其实就是$f*Id (k)$。因为积性函数卷积性函数还是积性函数。所以前面这一块就是一个积性函数。线性筛即可。

那么这个函数到底该怎么筛呢。

按照套路,设$g=f*Id$先观察$g(q^p)$的值,发现$g(q^p)=q^p-q^{p-1}$。

所以筛的方式与筛$\varphi$类似。

然后就可以$O(n)$做了。

其实发现上式可以数论分块,那么瓶颈其实在预处理。所以此题可以出成多次询问的版本。

code

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
#include<cmath>
using namespace std;
typedef long long ll;
const int N = 1e7 + 5,mod = 20101009;
ll read() {
	ll x = 0,f = 1;char c = getchar();
	while(c < '0' || c > '9') {
		if(c == '-') f = -1; c = getchar();
	}
	while(c >= '0' && c <= '9') {
		x = x * 10 + c - '0'; c = getchar();
	}
	return x * f;
}
int vis[N],tot,pri[N];
ll f[N];
inline ll calc(ll x) {
	return (x * (x + 1) / 2) % mod;
}
int main() {
	ll n = read(),m = read();
	if(n > m) swap(n,m);
	f[1] = 1;
	for(int i = 2;i <= n;++i) {
		if(!vis[i]) { pri[++tot] = i;f[i] = (i - 1ll * i * i) % mod; }
		
		for(int j = 1;j <= tot && pri[j] * i <= n;++j) {
			vis[i * pri[j]] = 1;
			if(i % pri[j] == 0) {
				f[i * pri[j]] = 1ll * f[i] * pri[j] % mod;
				break;
			}
			f[i * pri[j]] = f[i] * f[pri[j]];
		}
	}
	ll ans = 0;
	for(int i = 1;i <= n;++i) {
		ans += f[i] * calc(n / i) % mod * calc(m / i) % mod;
		ans %= mod;
	}
	cout<<(ans + mod) % mod;
	return 0;
}


最近的文章

华为云服务器试水

白嫖华为云服务器并搭建博客白嫖华为云服务器牛客联合华为云免费送服务器啦!!详情戳这里具体领取步骤里面已经讲了。修改密码进入华为云控制台,选择服务器-更多-重置密码,将密码改为自己常用的方便登录。注意新密码要重启服务器之后才能生效。尝试连接我选择的是windows系统,可以直接用本地windows系统连接。具体方法:win+r打开mstsc然后输入你的公网IP。公网IP可以在控制台中看到连接即可。进入后输入你重置后的密码然后就可以连接到你的服务器了。设置安全组宝塔面板需要设置8888接口,打...…

继续阅读
更早的文章

CSP2019游记

Day-1晚上按照惯例举行了送行仪式,吃了断头餐,然后就互抹吃蛋糕以示祝福。自己蛋糕太少了一口就吃完了,然后就只能静待被抹。。。然后xky送我了一大块奶油,然后,嘿嘿嘿~~~ 。拿着我新缴获的“弹药”一路往卫生间走,迎面走来个刚洗完脸的。“洗干净了么?””嗯“”我看看“,然后趁其不备再抹一把。“走吧,跟我一起回去再洗一遍~~ ”套路了几个人之后,我身后就跟着庞大的队伍了,嘿嘿~~ 。Day09:30照完遗像,10:00上车出发。路上紧张,有趣的是今年身边做的又是mjt。只不过去年他紧张,今...…

游记继续阅读