bzoj 2440 简单莫比乌斯反演
题目大意:
找第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 简单莫比乌斯反演的更多相关文章
- BZOJ 2440 完全平方数(莫比乌斯反演,容斥原理)
http://www.lydsy.com/JudgeOnline/problem.php?id=2440 题意:求第K个没有平方因子的数 思路:首先,可以二分数字,然后问题就转变成x以内有多少无平方因 ...
- BZOJ 2440 完全平方数 莫比乌斯反演模板题
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题目大意: 求第k个无平方因子的数 思路: 二分答案x,求1-x中有多少个平方因 ...
- bzoj [SDOI2014]数表 莫比乌斯反演 BIT
bzoj [SDOI2014]数表 莫比乌斯反演 BIT 链接 bzoj luogu loj 思路 \[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}a*[f[ ...
- bzoj 2440 (莫比乌斯函数)
bzoj 2440 完全平方数 题意:找出第k个不是完全平方数的正整数倍的数. 例如 4 9 16 25 36什么的 通过容斥原理,我们减去所有完全数 4有n/4个,但是36这种会被重复减去, ...
- BZOJ 2818 Gcd (莫比乌斯反演 或 欧拉函数)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 2534 Solved: 1129 [Submit][Status][Discu ...
- bzoj 1101 Zap —— 莫比乌斯反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1101 直接莫比乌斯反演. 代码如下: #include<cstdio> #inc ...
- Bzoj 2818: Gcd(莫比乌斯反演)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对 ...
- $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数
正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...
- HYSBZ 2440 完全平方数(莫比乌斯反演)
链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2440 若i为质数,n为i*i的倍数,则称n为含平方因子数. 求1~n的无平方因子数. F(x) ...
随机推荐
- iOS开发之 Xcode 5 下让你的应用在不同状态(debug, release)有不同的图标
http://nickcheng.com/post/unique-icons-for-your-app-in-different-state-in-xcode5-debug-release 应用在发布 ...
- 【Linux日志】系统日志及分析
Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 / ...
- Java 两个变量交换值
package test; public class Test { public static void main(String[] args) { int a, b; ...
- 别人要访问我的电脑上部署的tomcat,必须关闭防火墙吗?
局域网内要访问服务器上部署的tomcat,必须关闭防火墙吗? 不一定. 如果是需要使用 IP:端口号(ip:port)来访问,可以做以下设置(这里仅是说的tomcat访问). 首先在服务器的控制面板中 ...
- C#_Winfrom下的中英文翻译
Winform下的语言国际化,几行代码轻松实现 最近做了一些关于winform的项目,需要用到winform的语言国际化,在初使化的时候用起来非常方便.可以参考一下: 核心逻辑: 预览效果演示: ...
- css 颜色渐变
.top_nav { width: 100%; height: 29px; /* 如果浏览器不支持渐变,使用图像作为背景 */ background: u ...
- kafka - topic
http://www.cnblogs.com/yurunmiao/p/5550906.html http://www.cnblogs.com/chushiyaoyue/p/5695826.html
- DRUPAL点滴
1 admin/config/user-interface/xxx在hook_menu里定义这样一个path,就会在configuration界面看到xxx的链接 2 $news_items = db ...
- js和jquery获取子元素
<ul id="nav"> <li></li> <li> <ul> <li></li> < ...
- HDUOJ 2672---god is a girl 《斐波那契数》
god is a girl Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...