完全平方数

  小 X 自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而这丝毫不影响他对其他数的热爱。 
  这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一个小X讨厌的数。他列出了所有小X不讨厌的数,然后选取了第 K个数送给了小X。小X很开心地收下了。 
  然而现在小 W 却记不起送给小X的是哪个数了。你能帮他一下吗?

  还记得第一次接触这道题是一年前吧..那时候参加了一场某OJ的比赛

  然后并不会做..在discuss里面发现是“BZOJ2440原题”

  然后看到了一个叫做莫比乌斯函数的东西...很努力地看但是仍然没看懂...

  也奇怪..现在就能看懂了呢...

  

  莫比乌斯函数:

  μ(1)=1;

  对于每个质因子的次数都为1的数n,假设其能拆分出k个质因子,μ(n)=(-1)^k

  其他情况下μ(n)=0

  构造方法:

  首先容易证明莫比乌斯函数是积性函数

  然后用线筛

procedure build;
var m:int64;
i,j:longint;
begin
fillchar(vis,sizeof(vis),true);
prime[]:=;
m:=trunc(sqrt(INF));mu[]:=;
for i:= to m do
begin
if vis[i] then
begin
inc(prime[]);
prime[prime[]]:=i;
mu[i]:=-;
end;
for j:= to prime[] do
begin
if i*prime[j]>m then break;
vis[i*prime[j]]:=false;
if i mod prime[j]= then
begin
mu[prime[j]*i]:=;
break;
end;
mu[prime[j]*i]:=-mu[i];
end;
end;
end;

  对于这道题,很容易想到二分答案+容斥

  然后发现由偶数个次数为一的质数乘起来的完全平方因子,对答案的贡献是正的,奇数个是负的

  这个就可以用莫比乌斯函数来替代

 program bzoj2440;
const INF = ;maxn = ;
var test,L,R,ans,k,mid:int64;
tt:longint;
prime,mu:array[-..maxn]of int64;
vis:array[-..maxn]of boolean; procedure build;
var m:int64;
i,j:longint;
begin
fillchar(vis,sizeof(vis),true);
prime[]:=;
m:=trunc(sqrt(INF));mu[]:=;
for i:= to m do
begin
if vis[i] then
begin
inc(prime[]);
prime[prime[]]:=i;
mu[i]:=-;
end;
for j:= to prime[] do
begin
if i*prime[j]>m then break;
vis[i*prime[j]]:=false;
if i mod prime[j]= then
begin
mu[prime[j]*i]:=;
break;
end;
mu[prime[j]*i]:=-mu[i];
end;
end;
end; function solve(x:int64):int64;
var sum:int64;
i:longint;
begin
sum:=;
for i:= to trunc(sqrt(x)) do
inc(sum,(x div (int64(i)*i))*mu[i]); exit(sum);
end; begin
assign(input,'bzoj2440.in');reset(input);
readln(test);
build;
for tt:= to test do
begin
readln(k);
L:=;R:=INF;ans:=-;
while L<=R do
begin
mid:=(L+R) >> ;
if solve(mid)>=k then
begin
ans:=mid;R:=mid-;
end else L:=mid+;
end;
writeln(ans);
end;
end.

  

[BZOJ2440]完全平方数解题报告|莫比乌斯函数的应用的更多相关文章

  1. BZOJ2440 中山市选2011完全平方数(容斥原理+莫比乌斯函数)

    如果能够知道不大于n的合法数有多少个,显然就可以二分答案了. 考虑怎么求这个.容易想到容斥,即枚举完全平方数.我们知道莫比乌斯函数就是此种容斥系数.筛出来就可以了. 注意二分时会爆int. #incl ...

  2. 完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)

    完全平方数 HYSBZ - 2440 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些 数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而 这丝毫不影响他对其他 ...

  3. [BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】

    题目链接:BZOJ - 2440 题目分析 首先,通过打表之类的方法可以知道,答案不会超过 2 * k . 那么我们使用二分,对于一个二分的值 x ,求出 [1, x] 之间的可以送出的数有多少个. ...

  4. [luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

    题目链接:https://www.luogu.org/problemnew/show/P2568#sub 题目大意: 计算​$\sum_{x=1}^n\sum_{y=1}^n [gcd(x,y)==p ...

  5. BZOJ2440: [中山市选2011]完全平方数 容斥原理_莫比乌斯函数

    emmm....... 数学题都不友好QAQ...... Code: #include <cstdio> #include <algorithm> #include <c ...

  6. [计蒜客] tsy's number 解题报告 (莫比乌斯反演+数论分块)

    interlinkage: https://nanti.jisuanke.com/t/38226 description: solution: 显然$\frac{\phi(j^2)}{\phi(j)} ...

  7. [jzoj 6084] [GDOI2019模拟2019.3.25] 礼物 [luogu 4916] 魔力环 解题报告(莫比乌斯反演+生成函数)

    题目链接: https://jzoj.net/senior/#main/show/6084 https://www.luogu.org/problemnew/show/P4916 题目: 题解: 注: ...

  8. BZOJ2440(容斥+莫比乌斯函数)

    题目本质: 首先有如下结论: 而通过写一写可以发现: 举例来讲,36及其倍数的数,会被1的倍数加一遍,被4的倍数扣一遍,会被9的倍数扣一遍,而为了最终计数为0,需要再加回来一遍,所以在容斥里面是正号. ...

  9. 【BZOJ2440】完全平方数 [莫比乌斯函数]

    完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 小X自幼就很喜欢数. 但奇怪的是 ...

随机推荐

  1. poj 3009 (深搜求最短路)

    题目大意就是求在特定规则下的最短路,这个规则包含了消除障碍的操作.用BFS感觉选择消除障碍的时候不同路径会有影响,用DFS比较方便状态的还原(虽然效率比较低),因此这道题目采用DFS来写. 写的第一次 ...

  2. LintCode-381.螺旋矩阵 II

    螺旋矩阵 II 给你一个数n生成一个包含1-n^2的螺旋形矩阵 样例 n = 3 矩阵为 [     [ 1, 2, 3 ],     [ 8, 9, 4 ],     [ 7, 6, 5 ] ] 标 ...

  3. iOS- <项目笔记>UI控件常见属性总结

    1.UIView // 如果userInteractionEnabled=NO,不能跟用户交互 @property(nonatomic,getter=isUserInteractionEnabled) ...

  4. 菜鸟的飞翔日记-os篇

    一轮王道os复习感想 1概述 虽然去年有上操作系统这门必修课,考的成绩也算理想,本来还有点沾沾自喜,嗯,觉得自己学的还不错,知道有一天我拿起了王道,(没给王道打广告)看王道的原因完全在于为考研做准备, ...

  5. python爬虫 赶集网

    #coding=utf-8import requestsfrom lxml import etreefrom sqlalchemy import create_enginefrom sqlalchem ...

  6. sublime text 输入法不跟随光标

    1.引子 sublime text 有个BUG,那就是不支持中文的鼠标跟随(和PS类似输入的光标和文字候选框不在一起).如下图: 2.插件 安装IMESupport插件即可插件,这款插件是日本人写的. ...

  7. Python中编码问题:u'\xe6\x97\xa0\xe5\x90\x8d' 类型和 ‘\u559c\u6b22\u4e00\u4e2a\u4eba ’ 转为utf-8的解决办法

    相信小伙伴们遇到过类似这样的问题,python2中各种头疼的转码,类似u'\xe6\x97\xa0\xe5\x90\x8d' 的编码,直接s.decode()是无法解决编码问题.尝试了无数办法,都无法 ...

  8. PHP中Session和Cookie的探究

    一.Session (1)Session的由来以及介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”,生存时间为用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就 ...

  9. [剑指Offer] 53.表示数值的字符串

    题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...

  10. 【bzoj2653】middle 可持久化线段树区间合并

    题目描述 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整.给你一个长度为n的序列s.回答Q个这样的询问:s的左端点在[a,b]之间,右端点在[ ...