QQ 数(number.pas/c/cpp)——莫比乌斯函数
题目
【问题描述】
企鹅国数学家 QQ 潜心研究数论,终于发现了一个简单的数论问题!
一个 QQ 数定义为一个拥有一个大于 $ 1 $ 的完全平方数为因子的数字,一个数字的 QQ 值定义为这个数是 QQ 数的因数个数。
现在 QQ 想知道在 $[L,R]$ 范围内,每个整数的 QQ 值之和是多少?
你只需要告诉他这个数字,他就可以给你宝贵的 $ 10 $ 分作为一个奖励!
【输入格式】
第一行两个整数 $ L, R $ 代表要求的数字范围;
【输出格式】
输出一个整数表示 `L~R` 里每个数字的 QQ 值之和。
【输入样例】
1 10
【输出样例】
4
【样例说明】
4 的 QQ 值为 1,8 的 QQ 值为 2,9 的 QQ 值为 1。
【数据范围】
对于 $ 10\% $ 的数据,$ R\leq 10^4 $;
对于另外 $ 30\% $ 的数据,$ R\leq 10^6 $;
对于另外 $ 10\% $的数据,$ R \leq 10^7 $;
对于 $ 100\% $的数据,$ 1 \leq L\leq R \leq 10^9 $;
题解
因为 $ \mu(i) $ 含有平方因子的值为0,于是可以巧妙利用这个性质
记 $ [1,n] $ 的值为
$\ \ \ \ \sum_{i=1}^{n} \sum_{d|i}[1-\mu(d)] $
$ =\sum_{d=1}^n[1-\mu(d)^2] \lfloor \frac{n}{d} \rfloor $
$ =\sum_{d=1}^n \lfloor \frac{n}{d} \rfloor - \sum_{d=1}^n \lfloor \frac{n}{d} \rfloor \mu(d)^2 $
然后可以发现前面的 $ \sum_{d=1}^n \lfloor \frac{n}{d} \rfloor $ 可以分块,但后面的 $ \sum_{d=1}^n \lfloor \frac{n}{d} \rfloor \mu(d)^2 \ n \leq 10^9 $,没有办法预处理
考虑 $ \sum_{d=1}^n \lfloor \frac{n}{d} \rfloor \mu(d)^2 $ 的几何意义
$ \sum_{d=1}^n \lfloor \frac{n}{d} \rfloor \mu(d)^2 = n- \lfloor \frac{n}{2} \rfloor - \lfloor \frac{n}{3} \rfloor -\lfloor \frac{n}{5} \rfloor + \lfloor \frac{n}{6} \rfloor +... $
可以发现当 $ i> \sqrt{n} $ 时 $ \lfloor \frac{n}{i} \rfloor = 0$
所以只要枚举到 $ \sqrt{n} $ 时即可(其实还是可以分块优化的)
然后就可以在 $ O(\sqrt{n}) $ 完成
再附一种做法:
$ -\sum_{i=2}^{\sqrt{n}}\mu(i)\sum_{j=1}^{\lfloor \frac{n}{i^2 j} \rfloor} \lfloor \frac{n}{i^2 j} \rfloor $ 直接分块即可
代码
#include<bits/stdc++.h>
#define LL long long
#define _(d) while(d(isdigit(ch=getchar())))
using namespace std;
int R(){
int x;bool f=;char ch;_(!)if(ch=='-')f=;x=ch^;
_()x=(x<<)+(x<<)+(ch^);return f?x:-x;}
const int N=1e7+;
int p[N],vis[N],mu[N],l,r,tot;
LL make(int n){
LL ans=;
for(int i=;i*i<=n;i++)
ans+=mu[i]*(n/(i*i));
return ans;
}
LL work(int n){
LL ans=,res=;
for(int i=,l;i<=n;i=l+)
l=n/(n/i),ans+=(n/i)*(l-i+);
for(int i=,l;i<=n;i=l+)
l=n/(n/i),res+=(n/i)*(make(l)-make(i-));
return ans-res;
}
int main(){
mu[]=;
for(int i=;i<N;i++){
if(!vis[i])p[++tot]=i,mu[i]=-;
for(int j=;j<=tot&&p[j]*i<N;j++){
vis[i*p[j]]=;
if(i%p[j]==)break;
mu[i*p[j]]=-mu[i];
}
}
l=R(),r=R();
printf("%lld\n",work(r)-work(l-));
return ;
}
2019-03-20
QQ 数(number.pas/c/cpp)——莫比乌斯函数的更多相关文章
- bzoj2440(莫比乌斯函数)
bzoj2440 题意 求第 k 个不是完全平方数(除 1 以外)的正倍数的数. 分析 利用二分法求解,二分 x ,判断 x 是否是第 k 个数即可,那么我们就要计算 [1, x] 有几个符合条件的数 ...
- BZOJ.2440.[中山市选2011]完全平方数(莫比乌斯函数 二分)
题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 题意即求第\(k\)个无平方因子数. 无平方因子数(Square-Free Number),即分解之后所有质因 ...
- HDU 6053 TrickGCD 莫比乌斯函数/容斥/筛法
题意:给出n个数$a[i]$,每个数可以变成不大于它的数,现问所有数的gcd大于1的方案数.其中$(n,a[i]<=1e5)$ 思路:鉴于a[i]不大,可以想到枚举gcd的值.考虑一个$gcd( ...
- 2017 ACM暑期多校联合训练 - Team 3 1008 HDU 6063 RXD and math (莫比乌斯函数)
题目链接 Problem Description RXD is a good mathematician. One day he wants to calculate: ∑i=1nkμ2(i)×⌊nk ...
- hdu 1965 (莫比乌斯函数 莫比乌斯反演)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Relatively Prime Powers CodeForces - 1036F (莫比乌斯函数容斥)
Relatively Prime Powers CodeForces - 1036F Consider some positive integer xx. Its prime factorizatio ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
- [BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】
题目链接:BZOJ - 2440 题目分析 首先,通过打表之类的方法可以知道,答案不会超过 2 * k . 那么我们使用二分,对于一个二分的值 x ,求出 [1, x] 之间的可以送出的数有多少个. ...
- 数学(莫比乌斯函数):BZOJ 2440 完全平方数
Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些 数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而 这丝毫不影响他对其他数的热爱. 这 ...
随机推荐
- Java for LeetCode 106 Construct Binary Tree from Inorder and Postorder Traversal
Construct Binary Tree from Inorder and Postorder Traversal Total Accepted: 31041 Total Submissions: ...
- B. Two Buttons
这是Codeforces Round #295 (Div. 2) 的B 题,题意为: 给出n, m, 有两种操作,n 减一 和 n 乘以 2,问最少要多少次操作才能把n 变成 m. Sample te ...
- spring-boot5
Spring Boot集成MyBatis: (1)新建maven project;取名为:spring-boot-mybatis (2)在pom.xml文件中引入相关依赖: (3)创建启动类App.j ...
- sudo -i和sudo -s
sudo -i,加载用户变量,并跳转到目标用户home目录:sudo -s,不加载用户变量,不跳转目录: sudo : 暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码, ...
- 《CSS权威指南(第三版)》---第二章 选择器
本章的主要内容是,怎么获取文档中的元素给予渲染: 1.元素选择器: 2.ID选择器: 3.CLSSS选择器: 4.通配选择器:*; 5.属性选择器:selector[] 6.部分属性选择器: sele ...
- google IO大会
怎么参加一次 Google I/O?大概要多少预算? Google I/O(参加Goole I/O 是我的一个梦想,因为我是Google死忠,想亲自去Google总部看看,所以想知道这些) 费用构成: ...
- ASCII UNICODE UTF "口水文"
最近接了一个单是需要把非 UTF-8 (No BOM)编码的文件转换成 UTF-8 (No BOM),若此文件是 UTF-8 但带有 BOM ,需要转换成不带 BOM 的.于是开启了一天的阅读.首先花 ...
- mysql修改初始密码
通过MySQL命令行,可以修改MySQL数据库的密码,下面就为您详细介绍该MySQL命令行,如果您感兴趣的话,不妨一看. 格式:mysqladmin -u用户名 -p旧密码 password 新密码 ...
- storm--chuanzhiboke
Storm里面有7种类型的stream grouping 1. Shuffle Grouping: 随机分组, 随机派发stream里面的tuple,保证每个bolt接收到的tuple数目大致相同. ...
- MySQL日期处理函数_20160922
除了对文本字符串进行处理外,对日期处理是最常用的了,年.月.周.日等等,同时在日常工作报表中月报.周报.日报这样的报表也是最常见了. #二.mysql对日期的处理 SELECT #具体某一天 DATE ...