[SDOI2015]约数个数和
Sol
首先有个结论
\(\sum_{i=1}^{m}\sum_{j=1}^{n}d(i*j)=\sum_{i=1}^{m}\sum_{j=1}^{n}\sum_{x|i}\sum_{y|i}[gcd(x,y)==1]\)
证明:可以看po姐的博客
接着这个式子推
=\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x, y)==1\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor]\\
设f(i)=\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x, y)==i\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor]\\
设g(i)=\sum_{x|d}f(d)
\]
f(i)可以通过莫比乌斯反演求出
考虑求g(i)
=\sum_{i|x}\sum_{i|y}\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor\\
=\sum_{x=1}^{\lfloor\frac{n}{i}\rfloor}\sum_{y=1}^{\lfloor\frac{m}{y}\rfloor}\lfloor\frac{n}{x*i}\rfloor\lfloor\frac{m}{y*i}\rfloor\\
换个元=\sum_{i=1}^{x}\sum_{j=1}^{y}\lfloor\frac{x}{i}\rfloor\lfloor\frac{y}{j}\rfloor\\
\]
这个东西\(\sum_{i=1}^{x}\lfloor\frac{x}{i}\rfloor\)就是每个数的倍数的个数和的和,就是每个数约数的个数和的和预处理一下,前缀和一下就好,于是每个g(i)就可以O(1) 求。。。(约数的个数是积性函数,也可以线性筛)
数论分块什么的就不说了
# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(5e4 + 1);
IL ll Read(){
char c = '%'; ll x = 0, z = 1;
for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;
for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
return x * z;
}
int prime[_], mu[_], d[_], pred[_], num;
bool isprime[_];
IL void Prepare(){
isprime[1] = 1; mu[1] = d[1] = 1;
for(RG int i = 2; i < _; ++i){
if(!isprime[i]){ prime[++num] = i; mu[i] = -1; d[i] = 2; pred[i] = 1; }
for(RG int j = 1; j <= num && i * prime[j] < _; ++j){
isprime[i * prime[j]] = 1;
if(i % prime[j]){ mu[i * prime[j]] = -mu[i]; d[i * prime[j]] = d[i] * 2; pred[i * prime[j]] = 1; }
else{
mu[i * prime[j]] = 0;
pred[i * prime[j]] = pred[i] + 1;
d[i * prime[j]] = d[i] / (pred[i] + 1) * (pred[i] + 2);
break;
}
}
d[i] += d[i - 1]; mu[i] += mu[i - 1];
}
}
int main(RG int argc, RG char *argv[]){
Prepare();
for(RG int T = Read(); T; --T){
RG int n = Read(), m = Read(); RG ll ans = 0;
if(n > m) swap(n, m);
for(RG int i = 1, j; i <= n; i = j + 1){
j = min(n / (n / i), m / (m / i));
ans += 1LL * (mu[j] - mu[i - 1]) * d[n / i] * d[m / i];
}
printf("%lld\n", ans);
}
return 0;
}
[SDOI2015]约数个数和的更多相关文章
- BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演
BZOJ_3994_[SDOI2015]约数个数和_莫比乌斯反演 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表 ...
- P3327/bzoj3994 [SDOI2015]约数个数和(莫比乌斯反演)
P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...
- 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)
3994: [SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...
- 洛谷 [SDOI2015]约数个数和 解题报告
[SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...
- BZOJ 3994: [SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 898 Solved: 619[Submit][Statu ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...
- 洛谷P3327 - [SDOI2015]约数个数和
Portal Description 共\(T(T\leq5\times10^4)\)组数据.给出\(n,m(n,m\leq5\times10^4)\),求\[\sum_{i=1}^n\sum_{j= ...
- P3327 [SDOI2015]约数个数和 莫比乌斯反演
P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...
- [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)
[BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...
- 【BZOJ】3994: [SDOI2015]约数个数和
题意: \(T(1 \le T \le 50000)\)次询问,每次给出\(n, m(1 \le n, m \le 50000)\),求\(\sum_{i=1}^{n} \sum_{j=1}^{m} ...
随机推荐
- Linux-安装FFmpeg
FFmpeg官网:http://www.ffmpeg.org 官网介绍 FFmpeg is the leading multimedia framework, able to decode, enco ...
- ubuntu下安装memcached与php扩展测试使用
1,memcached需要libevent,所以要先安装它 下载地址:http://download.chinaunix.net/download.php?id=45065&ResourceI ...
- centos 环境变量配置
CentOS系统下如何将PHP和mysql命令加入到环境变量中,在Linux CentOS系统上 安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到 ...
- Eclipse中如何忽略报错的js文件
https://jingyan.baidu.com/article/4f7d5712d3701a1a20192786.html
- LOJ6003 - 「网络流 24 题」魔术球
原题链接 Description 假设有根柱子,现要按下述规则在这根柱子中依次放入编号为的球. 每次只能在某根柱子的最上面放球. 在同一根柱子中,任何2个相邻球的编号之和为完全平方数. 试设计一个算法 ...
- typeahead + JDK 8 并行流 + redis 高速即时查询.
感谢JDK8,让我们JAVA 程序员暂时不用担心失业. 有些情况,需要根据用户输入值,即时查询数据库,MYSQL显然不再适合这种业务. mongoDB看似最适合,但是为了这么一个破功能,也不值得特意去 ...
- SMJobBless官方Demo笔记
SMJobBless是苹果官方提供的用于"MacOS app获取root权限"的demo. 具体思路 使用Security.framework和ServiceManagement. ...
- 用Node.JS+MongoDB搭建个人博客(万众期待的router.js)(四)
万众期待的router.js,是我现在最想写的一个博客.因为他包含了整个个人博客的精髓.在这里,所有的请求配置,返回的参数等等所做的业务逻辑都在这个文件里实现. 我会详细说明这些代码的作用,所以这篇博 ...
- Linux基础一
基本命令 useradd xxx 创建一个用户 uname 查看系统架构信息 uname -a 显示详细信息 uname -r 显示内核信息 date 显示当前网络时间 cat ...
- NLP+VS︱深度学习数据集标注工具、方法摘录,欢迎补充~~
~~因为不太会使用opencv.matlab工具,所以在找一些比较简单的工具. . . 一.NLP标注工具BRAT BRAT是一个基于web的文本标注工具,主要用于对文本的结构化标注,用BRAT生成的 ...