[国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演
题解:
$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$
改成枚举d(设n < m)
$$ans = \sum_{d = 1}^{n}\sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]\frac{ij}{d}$$
考虑枚举$id$
设$N = \lfloor{\frac{n}{d}}\rfloor$,$M = \lfloor{\frac{m}{d}}\rfloor$
$$ans = \sum_{d = 1}^{n}{d}\sum_{i = 1}^{N}\sum_{j = 1}^{M}\sum_{t | gcd(i, j)}{\mu(t)ij}$$
把后面改成枚举$\mu(t)$
$$ans = \sum_{d = 1}^{n}d\sum_{t = 1}^{N}{\mu(t)} \sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}\sum_{j = 1}^{\lfloor{\frac{M}{t}}\rfloor}ijt^2$$
$$ans = \sum_{d = 1}^{n}d\sum_{t = 1}^{N}{\mu(t)} t^2 \sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}\sum_{j = 1}^{\lfloor{\frac{M}{t}}\rfloor}ij$$
$$ans = \sum_{d = 1}^{n}d\sum_{t = 1}^{N}{\mu(t)} t^2 \sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}i\sum_{j = 1}^{\lfloor{\frac{M}{t}}\rfloor}j$$
因为$\sum_{i = 1}^{\lfloor{\frac{N}{t}}\rfloor}i$显然是可以$O(n)$预处理的,而$\lfloor{\frac{N}{t}}\rfloor \lfloor{\frac{M}{t}}\rfloor$可以整数分块,$t^2\mu(t)$可以线性筛$O(n)$预处理,总复杂度$O(n + n\sqrt{n})$
不过其实还有更优的方法,以后再说吧。。。
#include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 10000010
#define p 20101009
#define LL long long int n, m, N, M, tot;
LL ans;
int prime[AC], mu[AC];
LL sum[AC], s[AC];//质数,mu函数,1~n求和,mu(t)*t^2求和
bool z[AC]; void pre()
{
scanf("%d%d", &n, &m);
mu[] = ;
int b = max(n, m), x;
s[] = sum[] = ;//初始化1,,,,因为下面的i是从2开始的
for(R i = ; i <= b; i++)
{
if(!z[i]) prime[++tot] = i, mu[i] = -;
s[i] = (s[i - ] + (LL)mu[i] * ((LL)i * (LL)i)%p) % p;//error !!, mu要LL
sum[i] = (sum[i - ] + i) % p;
for(R j = ; j <= tot; j ++)
{
x = prime[j];
if(i * x > b) break;
z[i * x] = true;
if(!(i % x)) break;
mu[i * x] = -mu[i];
}
}
} void work()
{
if(m < n) swap(n, m);
//for(R i = 1; i <= m; i ++) printf("%lld ", sum[i]);
//printf("\n");
LL summ;
for(R i = ; i <= n; i++)//枚举d
{
int pos;
N = n / i, M = m / i;
summ = ;
for(R j = ; j <= N; j = pos + )//枚举t
{
pos = min(N / (N / j), M / (M / j));
summ += (((s[pos] - s[j - ]) % p * sum[N / j]) % p * sum[M / j]) % p;
summ %= p;
}
summ = (summ * i + p) % p;//error!!!别把d给忘了!
ans = (ans + summ + p) % p;
//printf("%lld\n", ans);
}
printf("%lld\n", ans);
} int main()
{
// freopen("in.in", "r", stdin);
pre();
work();
// fclose(stdin);
return ;
}
[国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演的更多相关文章
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
- 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)
题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...
- 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 莫比乌斯反演
又一道...分数和取模次数成正比$qwq$ 求:$\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)$ 原式 $=\sum_{i=1}^N\sum_{j=1}^M\frac{i*j}{g ...
- 题解-[国家集训队]Crash的数字表格 / JZPTAB
题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...
- 洛谷 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
推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...
- 题解 P1829 【[国家集训队]Crash的数字表格 / JZPTAB】
题目 我的第一篇莫比乌斯反演题解 兴奋兴奋兴奋 贡献一个本人自己想的思路,你从未看到过的船新思路 [分析] 显然,题目要求求的是 \(\displaystyle Ans=\sum_{i=1}^n\su ...
- [luogu1829][bzoj2154][国家集训队]Crash的数字表格 / JZPTAB【莫比乌斯反演】
传送门:洛谷,bzoj 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整 ...
随机推荐
- click与on的区别
click只能用于html在注册事件之后没有变化的:on用于html在注册事件后,还会通过JS脚本添加一些按钮,并者希望这些按钮也会有之前注册事件的按钮同样的事件话,就需要用on去为按钮的父节点去注册 ...
- web pack
WebPack是模块捆绑器,如果你的代码跨越了不同模块(例如不同Javascript文件),web pack可以将这些零散的代码构建到浏览器可读单个文件中. web pack还可以作为构建通道,你可以 ...
- C# 用HttpWebRequest模拟一个虚假的IP伪造ip
有人会说:IP验证是在TCP层完成的,不是HTTP层完成的,如果伪造IP的话可能连TCP的三次握手都完不成.我这里说的不是完全意义的伪造.如果你使用透明代理上网,那么在透明代理发送给服务器端的HTTP ...
- Python学习笔记:第一天python基础
目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据类型 6. 输入 7. if语句 1. python简介 python是在198 ...
- ecshop 全系列版本网站漏洞 远程代码执行sql注入漏洞
ecshop漏洞于2018年9月12日被某安全组织披露爆出,该漏洞受影响范围较广,ecshop2.73版本以及目前最新的3.0.3.6.4.0版本都受此次ecshop漏洞的影响,主要漏洞是利用远程代码 ...
- Python3 使用基本循环实现多级目录(思路)
一.多级目录设计: 1. 通过循环的方式显示菜单和进入菜单 2. 设置标志位以提供回退上一层菜单 2. 设置标志位以提供退出程序 二.注意要点: 1. 菜单样式,层次关系不要弄混乱 2. 当输入错误时 ...
- x86的控制寄存器CR0,CR1,CR2,CR3
状态和控制寄存器组除了EFLAGS.EIP ,还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3. 这几个寄存器中保存全局性和任务无关的机器状态. CR0中包含了6个预定义标志,0位是保 ...
- vTaskDelete(NULL)使用注意事项
在实际开发过程中,记录犯过的一个错误,如下 vTaskDelete(NULL); iccid_return_num = ; 错误原因分析,在任务删除之后(调用vTaskDelete(NULL)之后), ...
- 创龙TMS320C6748开发板串口和中断学习笔记
1. 硬件上,底板有2个串口,UART1和UART2(使用了MAX3232电平转换芯片),其中UART2也可以转RS485的. 2. 看下数据手册部分,不过一直不理解过采样的意思,16字节的FIFO ...
- android get cpu rate
public static int getProcessCpuRate() { try { RandomAccessFile reader = new RandomAccessFile("/ ...