洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题目背景
提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算
题目描述
今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple)。对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整数。例如,LCM(6, 8) = 24。
回到家后,Crash还在想着课上学的东西,为了研究最小公倍数,他画了一张N*M的表格。每个格子里写了一个数字,其中第i行第j列的那个格子里写着数为LCM(i, j)。一个4*5的表格如下:
1 2 3 4 5
2 2 6 4 10
3 6 3 12 15
4 4 12 4 20
看着这个表格,Crash想到了很多可以思考的问题。不过他最想解决的问题却是一个十分简单的问题:这个表格中所有数的和是多少。当N和M很大时,Crash就束手无策了,因此他找到了聪明的你用程序帮他解决这个问题。由于最终结果可能会很大,Crash只想知道表格里所有数的和mod20101009的值。
输入输出格式
输入格式:
输入的第一行包含两个正整数,分别表示N和M。
输出格式:
输出一个正整数,表示表格中所有数的和mod20101009的值。
输入输出样例
说明
30%的数据满足N, M≤ 10^3。
70%的数据满足N, M≤ 10^5。
100%的数据满足N, M≤ 10^7。
Orz gxz
https://www.cnblogs.com/GXZlegend/p/6999816.html
然后分块套分块
时间复杂度$O(n)$
- // luogu-judger-enable-o2
- #include<cstdio>
- #include<algorithm>
- #define LL long long
- using namespace std;
- const int MAXN = 1e7 + , mod = ;
- int N, M;
- int prime[MAXN], tot, mu[MAXN], vis[MAXN];
- LL sum[MAXN];
- void GetMu(int N) {
- mu[] = ; sum[] = ;
- for(int i = ; i <= N; i++) {
- if(!vis[i]) mu[i] = -, prime[++tot] = i;
- for(int j = ; j <= tot && i * prime[j] <= N; j++) {
- vis[i * prime[j]] = ;
- if(!(i % prime[j])) {mu[i * prime[j]] = ; break;}
- else mu[i * prime[j]] = -mu[i];
- }
- }
- for(LL i = ; i <= N; i++) sum[i] = (1ll * i * i % mod * mu[i] % mod + sum[i - ] + mod) % mod;
- }
- LL S(LL x) {
- return 1ll * (x + ) * x / % mod;//interesting
- }
- LL Query(int n, int m) {
- int last = ;LL ret = ;
- for(int d = ; d <= n; d = last + ) {
- last = min(n / (n / d), m / (m / d));
- ret = (ret + 1ll * (sum[last] - sum[d - ] + mod) % mod * S(n / d) % mod * S(m / d) % mod) % mod;
- }
- return ret % mod;
- }
- int main() {
- // freopen("nt2011_table.in", "r", stdin);
- // freopen("nt2011_table.out", "w", stdout);
- scanf("%d %d", &N, &M);
- if(N > M) swap(N, M);
- GetMu(1e7 + );
- int last = ; LL ans = ;
- for(int p = ; p <= N; p = last + ) {
- last = min(N / (N / p), M / (M / p));
- ans = (ans + 1ll * (S(last) - S(p - ) + mod) % mod * (Query(N / p, M / p)) % mod) % mod;
- }
- printf("%lld", ans % mod);
- return ;
- }
- /*
- 123 321
- */
洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)的更多相关文章
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告
[国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
传送门 式子好麻烦orz……大佬好腻害orz->这里 //minamoto #include<iostream> #include<cstdio> #define ll ...
- 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题意:求$\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$. 开始开心(自闭)化简: $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)$ =$\su ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
又一道...分数和取模次数成正比$qwq$ 求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$ 原式 $=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{g ...
- 洛谷P1829 [国家集训队]Crash的数字表格
题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整数.例如,LCM(6, ...
- [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
---题面--- 题解: $$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$ 改成枚举d(设n < m) $$ans ...
- luoguP1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题意 注:默认\(n\leqslant m\). 所求即为:\(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}lcm(i,j)\) 因为\(i*j=\gcd(i, ...
- P1829 [国家集训队]Crash的数字表格 / JZPTAB
推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...
随机推荐
- stm32 输入捕获学习(一)
输入捕获模式可以用来测量脉冲宽度或者测量频率.STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能.STM32 的输入捕获,简单地说就是通过检测 TIMx_CHx 上的边沿信 ...
- WPF的组成架构
Windows呈现基础(Windows Presentation foundation,WPF)是微软新一代图形系统,运行,NET Framework3.0架构下,为用户界面.2D/3D图形.文档和媒 ...
- Linux yum apt-get 方式
Linux 大致可以分两大类 RedHat分支 redhat, centos ,mandrake,mandriva,国产的红x等 1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参 ...
- 5.1 Linux(8)
2019-5-1 21:37:20 嗓子前天回来上火,现在不疼了就是有点痒痒! 多喝热水 今天老师讲的如何发布项目,其实就是配置一下自己的uwsgi和 Nginx 配置一下 其他的不难 笔记很详细 ...
- em和rem的区别
rem和em单位一样,都是一个相对单位,不同的是em是相对于元素的父元素的font-size进行计算,rem是相对于根元素html的font-size进行计算,这样一来rem就绕开了复杂的层级关系,实 ...
- GitHub webstorm 及 README.md 姿势
README.md 语法格式: 规范的README文件开头都写上一个标题,这被称为大标题. 标题: #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 ...
- [转]C#利用委托跨线程更新UI数据
在使用C#的过程中,难免会用到多线程,而用多线程之后,线程如何与界面交互则是一个非常头疼的问题.其实不仅仅是界面,一般情况下,我们往往需要获得线程的一些信息来确定线程的状态.比较好的方式是用委托实现, ...
- Ienumerable和Ienumerator的使用
using UnityEngine; using System.Collections; public class TestCoroutine : MonoBehaviour { void Start ...
- Razor 语法糖常规用法
1.隐匿代码表达式 例: @model.name 会将表达式的值计算并写入到响应中,输入时采用html编码方式 2.显示表达式 例:@(model.name)会将输入@model.name字符串 3. ...
- php 调用微信虚拟支付
摘要:小游戏对接微信虚拟支付,需要自己的后台调用微信的虚拟支付接口,微信的文档实在烂,总结走过的坑. 1.报错{errcode:90007,errmsg:invalid openid} 无效的open ...