BZOJ.2440.[中山市选2011]完全平方数(莫比乌斯函数 二分)
总感觉博客园的\(Markdown\)很。。\(gouzhi\),可以看这的。
题意即求第\(k\)个无平方因子数。
无平方因子数(Square-Free Number),即分解之后所有质因数的次数都为1的数
可以想到莫比乌斯函数,假设\(n\)是答案,那么有$$k=n-\sum_{i=1}^n(1-|\mu(i)|)$$
(从这里能看出\(x\)的上界,后面的\(\sum\)肯定是\(<\frac{n}{2}\)的,所以\(n\leq 2*k\))
二分一个\(n\),求\([1,n]\)中有多少个无平方因子数。
既然带着个平方就都开方。根据容斥,对于\([1,\sqrt{n}]\)中的质数,答案为$$[1,n]中0个质数平方倍数的个数-1个质数平方倍数的个数+2个质数平方倍数的个数-\ldots$$
即对于奇数个质数平方贡献为负,偶数个贡献为正,枚举这些质因子。若存在某个质因子的次数\(>1\),那么对答案没有影响(如\(pi^2*pj^2\)在计算\(pi*pj\)时统计了个数)。这也符合莫比乌斯函数的特点。那么答案可以写为:$$\sum_{i=1}{\lfloor\sqrt{n}\rfloor}\mu(i)*\lfloor\frac{n}{i2}\rfloor$$
也可以整除分块... 右端点是这样的:\(r=\sqrt{\frac{n}{n/i^2}}\)。
\(r\)最大是\(2e9\),所以\(l+r\)可能爆int!
就我被这个坑朝了吧。。
//1308kb 2148ms
#include <cmath>
#include <cstdio>
const int N=5e4;
int cnt,P[10005],mu[N+3],pw[N+3];
bool Not_P[N+3];
void Init()
{
mu[1]=1;
for(int i=2; i<N; ++i)
{
if(!Not_P[i]) P[++cnt]=i,mu[i]=-1;
for(int j=1; j<=cnt&&i*P[j]<N; ++j)
{
Not_P[i*P[j]]=1;
if(i%P[j]) mu[i*P[j]]=-mu[i];
else {mu[i*P[j]]=0; break;}
}
}
for(int i=1; i<N; ++i) pw[i]=i*i;
}
bool Check(long long n,int K)
{
int res=0;//res=n
for(int i=1,lim=sqrt(n); i<=lim; ++i)
if(mu[i]/*这个?*/) res+=mu[i]*(n/pw[i]);
return res>=K;
}
int main()
{
Init();
int T,K; scanf("%d",&T);
long long l,r,mid;//!
while(T--)
{
scanf("%d",&K), l=1, r=K<<1;
while(l<r)
if(Check(mid=(l+r)>>1,K)) r=mid;
else l=mid+1;
printf("%lld\n",l);
}
return 0;
}
BZOJ.2440.[中山市选2011]完全平方数(莫比乌斯函数 二分)的更多相关文章
- BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数
BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数 题面 找出第k个不是平方数的倍数的数(1不是平方数, \(k \le 10^9\)). 题解 首先二分答案,问题就转化成了求\([ ...
- Bzoj 2440: [中山市选2011]完全平方数(莫比乌斯函数+容斥原理+二分答案)
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MB Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平 ...
- BZOJ 2440 [中山市选2011]完全平方数 ——莫比乌斯函数
$\sum_{i=1}^n[i==d^2*p]$ 其中p无平方因子$=\sum_{d^2\mid n,d>=2}\sum_{i=1}^{\lfloor {n/d^2} \rfloor} \lef ...
- BZOJ 2440 [中山市选2011]完全平方数 (二分 + 莫比乌斯函数)
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4805 Solved: 2325[Submit][Sta ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3028 Solved: 1460[Submit][Sta ...
- BZOJ 2440: [中山市选2011]完全平方数( 二分答案 + 容斥原理 + 莫比乌斯函数 )
先二分答案m,<=m的有m-∑(m/pi*pi)+∑(m/pi*pi*pj*pj)-……个符合题意的(容斥原理), 容斥系数就是莫比乌斯函数μ(预处理)... ----------------- ...
- [BZOJ 2440] [中山市选2011] 完全平方数 【二分 + 莫比乌斯函数】
题目链接:BZOJ - 2440 题目分析 首先,通过打表之类的方法可以知道,答案不会超过 2 * k . 那么我们使用二分,对于一个二分的值 x ,求出 [1, x] 之间的可以送出的数有多少个. ...
- bzoj 2440: [中山市选2011]完全平方数【莫比乌斯函数+二分】
二分答案,然后用莫比乌斯函数作为容斥系数,计算当前枚举的mid内有几个满足要求的数 #include<iostream> #include<cstdio> #include&l ...
- bzoj 2440: [中山市选2011]完全平方数
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #defin ...
随机推荐
- 一些常见修改命令(针对ubuntu 14.04 持续更新中...)
1.PS1 在哪: echo $PS1 vi /etc/bash.bashrc /W输出最后一个目录 /w输出完整目录 2.设置静态IP地址:vim /etc/network/i ...
- SSM数据库数据导出excel
首先,这是我对自己的需求而使用的逻辑,若有可以完美的地方方便告诉下小白. apache的poi MAVEN <dependency> <groupId>org.apache.p ...
- Linux命令(七)Linux用户管理和修改文件权限
1. 用户管理 1.1 创建用户/设置密码/删除用户 (-m很重要,自动添加用户家目录) 创建用户组dev, 给用户组dev新建xiaoqin用户,给新用户设置密码! 1.2 查看用户信息 1.3 设 ...
- SQL语句(十四)子查询
--1. 使用IN关键字 --例1 查询系别人数不足5人的系别中学生的学号.姓名和系别 --系别人数不足5人的系别 ==>选择条件 select Sdept from Student Group ...
- Mybatis 使用 mapper 接口规范的 一对一, 一对多,多对多映射
首先的 是 最原始的 pojo 类来 做简单映射 简单 pojo 映射: <mapper namespace="com.ghc.dao.UserDao"> <se ...
- 通达信zig函数的python实现
通达信zig函数的python实现 代码 # coding: utf-8 """ Created on Sat Jan 05 18:53:39 2019 http://w ...
- AngularJS -- 代码实例
整理书籍内容(QQ:283125476 发布者:M [重在分享,有建议请联系->QQ号]) ng-change 当文本输入字段中内容发生了变化,就会改变equation.x的值: <bod ...
- 【转】XMPP_3920_最靠谱的中文翻译文档
CHENYILONG Blog XMPP_3920_最靠谱的中文翻译文档 Fullscreen © chenyilong. Powered by Postach.io Blog
- XMPP用户登录
CHENYILONG Blog XMPP用户登录 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilon ...
- Xcode多种Build Configuration配置使用
Build Configuration? Xcode默认会有2个编译模式,一个是Debug,一个是Release.Release下不能调试程序,编译时有做编译优化,会比用Debug打包出来的运行快,另 ...