题目大意:

找第k个非平方数,平方数定义为一个数存在一个因子可以用某个数的平方来表示

这里首先需要考虑到二分才可以接下来做

二分去查找[1 , x]区间内非平方数的个数,后面就是简单的莫比乌斯反演了

容斥原理的思想,首先考虑所有数都属于非平方数 那么就是x

然后对于每一个平方数都要减去,但是这里应该只考虑质数的平方数就可以了

那么就扩展为x - x/(2^2) - x/(3^2) - x/(k^2)....

然后因为中间存在重复减的那么要加回来

-> x - x/(2^2) - x/(3^3) - x/(k^k)+ x/(2^2*3^2)+x/(2^2*4^2)....

后面3个质因数的平方组合就是 *(-1) 了

以此类推,那么k个数组成的质因数平方就是 *(-1)^k

其实这就是一个莫比乌斯函数了

这是积性函数,用线性筛法跑一遍就行了,因为都是平方的,所以筛到不超过1000000就足够了

 #include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 100000
int mu[N+] , prime[N+] , tot;
bool check[N+];
void get_mu()
{
tot = ;
for(int i= ; i<=N ; i++){
if(!check[i]){
prime[tot++] = i;
mu[i] = -;
}
for(int j= ; j<tot ; j++){
if((ll)i*prime[j]>N) break;
check[i*prime[j]] = true;
if(i%prime[j]==){
mu[i*prime[j]] = ;
break;
}else mu[i*prime[j]] = -mu[i];
}
}
} bool ok(int m , int n)
{
int mx = (int)(sqrt(m+0.5)) , ret = m;
for(int j= ; j<=mx ; j++){
ret += m/(j*j)*mu[j];
}
return ret>=n;
} int solve(int n)
{
int l= , r=*(1e9) , ans=;
while(l<=r){
int m = ((ll)l+r)/;
// cout<<m<<endl;
if(ok(m , n)){
r=m-;
ans=m;
}
else{
l = m+;
}
}
return ans;
} int main()
{
// freopen("in.txt" , "r" , stdin);
get_mu();
int T;
scanf("%d" , &T);
while(T--){
int n;
scanf("%d" , &n);
printf("%d\n" , solve(n));
}
return ;
}

bzoj 2440 简单莫比乌斯反演的更多相关文章

  1. BZOJ 2440 完全平方数(莫比乌斯反演,容斥原理)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2440 题意:求第K个没有平方因子的数 思路:首先,可以二分数字,然后问题就转变成x以内有多少无平方因 ...

  2. BZOJ 2440 完全平方数 莫比乌斯反演模板题

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题目大意: 求第k个无平方因子的数 思路: 二分答案x,求1-x中有多少个平方因 ...

  3. bzoj [SDOI2014]数表 莫比乌斯反演 BIT

    bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ...

  4. bzoj 2440 (莫比乌斯函数)

    bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4  9  16  25 36什么的 通过容斥原理,我们减去所有完全数  4有n/4个,但是36这种会被重复减去, ...

  5. BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 2534  Solved: 1129 [Submit][Status][Discu ...

  6. bzoj 1101 Zap —— 莫比乌斯反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 直接莫比乌斯反演. 代码如下: #include<cstdio> #inc ...

  7. Bzoj 2818: Gcd(莫比乌斯反演)

    2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对 ...

  8. $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数

    正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...

  9. HYSBZ 2440 完全平方数(莫比乌斯反演)

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2440 若i为质数,n为i*i的倍数,则称n为含平方因子数. 求1~n的无平方因子数. F(x) ...

随机推荐

  1. FSL安装

    本文介绍如何安装医学图像处理软件fsl. 安装环境:Win8和Ubuntu 14.04 LTS(双系统和虚拟机皆可) 1. 安装ubuntu 14.04 LTS 2. 打开终端,设置ip代理:expo ...

  2. Object Pascal 数据类型

     数据类型与定义变量 Object Pascal 语言的最大特点是对数据类型的要求非常严谨.传递给过程或函数的参数值必须与形参的类型一致.在Object Pascal 语言中不会看到像C 语言编译器提 ...

  3. Excel 、数据库 一言不合就转换 (zhuan)

    http://blog.csdn.net/marksinoberg/article/details/52280786 ***************************************** ...

  4. hiho1092_have lunch together

    题目 两个人从同一个点出发,在一个餐厅中寻找两个相邻的座位,需要是的从出发点到达座位的距离总和最短.题目链接: Have Lunch Together     最短路程,一开始以为要用dijkstra ...

  5. SVN操作手册

    目 录 第1章 简介    1 第2章 SVN服务端    2 2.1 安装VisualSVN    2 2.2 VisualSVN服务    3 2.3 版本库    4 2.3.1 创建版本库   ...

  6. mongodb配置及简单示例

    安装 在官网下载安装 https://www.mongodb.com/ 配置 我的电脑—>右键属性—>左边列表中的高级程序设置—>环境变量 点击path 把你的mongodb文件路径 ...

  7. robotframework笔记6

    测试文件结构 *** Settings *** Library OperatingSystem Library BuiltIn Resource ressources.py *** Variables ...

  8. python3 安装scrapy Exception: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/pip/req/req_install.py", line 1006, in check_if_exists解决方法

    错误代码: Exception: Traceback (most recent call last): File , in check_if_exists self.satisfied_by = pk ...

  9. HTML5自学笔记[ 16 ]canvas绘图基础3

    canvas还提供提供了一些动态方法,使图像可以旋转.缩放和移动,与css3中的方法一样. 移动:translate(x,y),x和y为横竖方向的偏移量 旋转:rotate(弧度),弧度=角度*Mat ...

  10. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...