完全平方数

Time Limit: 10 Sec  Memory Limit: 128 MB
[Submit][Status][Discuss]

Description

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

Input

  包含多组测试数据。文件第一行有一个整数 T,表示测试数据的组数。
  第 2 至第 T+1 行每行有一个整数 Ki,描述一组数据,含义如题目中所描述。

Output

  含 T 行,分别对每组数据作出回答。第 i 行输出相应的
  第 Ki 个不是完全平方数的正整数倍的数。

Sample Input

  4
  1
  13
  100
  1234567

Sample Output

  1
  19
  163
  2030745

HINT

  对于 100% 的数据有 1 ≤ Ki ≤ 10^9, T ≤ 50

Main idea

  询问第 k 个不含完全平方因子的数。

Source  

  显然我们可以简化一下问题,二分答案。那么我们就只需要知道:1~n中 不含完全平方因子 的数的个数。

  然后我们思考一下容斥,用(总数-完全平方数个数):完全平方数个数 = 至少有1个质数平方因子的数 - 至少2个质数平方因子的数 + 至少3个质数平方因子的数……
  (假设你有一堆质数 {P_1, ..., P_n},A_i 表示的是 包含 P_i^2 作为因子的数的集合)  

  也就是:奇数个质数平方因子的数 - 偶数个质数平方因子的数
  然后我们发现,那么可以枚举一个d,删除d^2相关,这时候系数也就是μ(d),求一下莫比乌斯函数即可。当d有奇数个质数因子的时候,删除的是有奇数个质数平方因子中d^2的倍数。
  整理成式子也就是:

Code

 #include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
typedef long long s64; const int ONE = ; int T;
int n,m;
int prime[ONE],miu[ONE],isp[ONE],p_num; int get()
{
int res=,Q=; char c;
while( (c=getchar())< || c>)
if(c=='-')Q=-;
if(Q) res=c-;
while((c=getchar())>= && c<=)
res=res*+c-;
return res*Q;
} void Getmiu(int MaxN)
{
miu[] = ;
for(int i=; i<=MaxN; i++)
{
if(!isp[i])
isp[i] = , prime[++p_num] = i, miu[i] = -;
for(int j=; j<=p_num, i*prime[j]<=MaxN; j++)
{
isp[i * prime[j]] = ;
if(i % prime[j] == )
{
miu[i * prime[j]] = ;
break;
}
miu[i * prime[j]] = -miu[i];
}
}
} s64 Check(s64 n)
{
s64 res = ,Q = sqrt(n);
for(int d=; d<=Q; d++)
res += miu[d] * (n/(d*d));
return res;
} void Solve()
{
n = get();
s64 l = , r = 2e9;
while( l < r- )
{
s64 mid = (l+r)>>;
if(Check(mid) < n) l = mid;
else r = mid;
} if(Check(r) <= n) printf("%d", r);
else printf("%d", l);
printf("\n");
} int main()
{
Getmiu(ONE-);
T = get();
while(T--)
Solve();
}

【BZOJ2440】完全平方数 [莫比乌斯函数]的更多相关文章

  1. BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数

    BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数 题面 找出第k个不是平方数的倍数的数(1不是平方数, \(k \le 10^9\)). 题解 首先二分答案,问题就转化成了求\([ ...

  2. BZOJ2440/洛谷P4318 [中山市选2011]完全平方数 莫比乌斯函数

    题意:找到第k个无平方因子数. 解法:这道题非常巧妙的运用了莫比乌斯函数的性质! 解法参考https://www.cnblogs.com/enzymii/p/8421314.html这位大佬的.这里我 ...

  3. bzoj2440(莫比乌斯函数)

    bzoj2440 题意 求第 k 个不是完全平方数(除 1 以外)的正倍数的数. 分析 利用二分法求解,二分 x ,判断 x 是否是第 k 个数即可,那么我们就要计算 [1, x] 有几个符合条件的数 ...

  4. bzoj2440 完全平方数 莫比乌斯值+容斥+二分

    莫比乌斯值+容斥+二分 /** 题目:bzoj2440 完全平方数 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2440 题意:求第k个小x数 ...

  5. Bzoj 2440: [中山市选2011]完全平方数(莫比乌斯函数+容斥原理+二分答案)

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MB Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平 ...

  6. BZOJ.2440.[中山市选2011]完全平方数(莫比乌斯函数 二分)

    题目链接 总感觉博客园的\(Markdown\)很..\(gouzhi\),可以看这的. 题意即求第\(k\)个无平方因子数. 无平方因子数(Square-Free Number),即分解之后所有质因 ...

  7. BZOJ2440:[中山市选2011]完全平方数(莫比乌斯函数)

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

  8. 【BZOJ 2440】【中山市选 2011】完全平方数 莫比乌斯函数+容斥原理

    网上PoPoQQQ的课件: •题目大意:求第k个无平方因子数 •无平方因子数(Square-Free Number),即分解之后所有质因数的次数都为1的数 •首先二分答案 问题转化为求[1,x]之间有 ...

  9. 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 ...

随机推荐

  1. Hibernate-ORM:09.Hibernate中的getCurrentSession()

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述,以优雅的方式创建session对象,我将会说明优点,并提炼成工具类 优点: 1.无需手动关闭s ...

  2. OrCAD设置原理图页面大小

    1. 右键要修改的原理图文件 2. 选择适合的尺寸

  3. ABP框架插件开发

    http://personball.com/abp/2017/08/21/abp-how-to-use-plugin

  4. ES5新增数组方法(3):some

    检查数组元素中是否有元素符合指定. // 数组中的元素部分满足指定条件返回true let arr = [1, 3, 5, 7, 9]; console.log(arr.some((value, in ...

  5. ubuntu 把软件源修改为国内源

    国内有很多Ubuntu的镜像源,比如:阿里源.网易源等,还有很多教育网的源,比如:清华源.中科大源等. 这里以清华源为例讲解如何修改Ubuntu 18.04里面默认的源. 修改步骤 第一步:备份原始源 ...

  6. 第二篇 Postman的高阶使用之配置全局变量及局部变量的调用及设置方法(手动方法)

    第五篇主要写了关于postman的基本使用,重点是如果发送json请求,为什么要将发送json请求呢, 一是目前大多数的请求已经倾向于发送json格式,二是本人太懒了,不想一个字段一个字段的添加到参数 ...

  7. python 基础篇 04(列表 元组 常规操作)

    本节主要内容:1. 列表2. 列表的增删改查3. 列表的嵌套4. 元组和元组嵌套5. range 一. 列表1.1 列表的介绍列表是python的基础数据类型之一 ,其他编程语言也有类似的数据类型. ...

  8. Leetcode. 回文字符串的分割和最少分割数

    Q1: 回文字符串的分割 Given a string s, partition s such that every substring of the partition is a palindrom ...

  9. pyinstaller加密打包

    pyinstaller -F -w --key=keys --clean --icon=imgs/xxx.ico xxx.py

  10. 程序运行bug查看

    1.左击计算机进入管理,点击windows日志,查看程序信息. 可以方便看到报错信息.