题目描述

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

这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一个小X讨厌的数。他列出了所有小X不讨厌的数,然后选取了第 K个数送给了小X。小X很开心地收下了。

然而现在小 W 却记不起送给小X的是哪个数了。你能帮他一下吗?

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

4
1
13
100
1234567

输出样例#1:

1
19
163
2030745

说明

对于 50%的数据有 1≤Ki​≤105 , 对于 100%的数据有 1≤Ki​≤109,T≤50

Solution:

  本题zyys。

  题意就是求第$k$个没有完全平方数因子的数,所谓数$x$的完全平方数因子就是$i^2|x,i\in Z^+,i\neq 1$。

  一眼可以想到,直接线性枚举,然后每次$\sqrt n$求约数判断,这样能水分,但是切不了本题。

  此时,因为答案显然单调递增,考虑二分答案,然后判断$[1,x]$中的满足条件的数个数是否等于$k$。

  对于$x$以内的无平方因子数=$0$个质数的平方的倍数的个数(即$1$的倍数)-$1$个质数的平方的倍数的个数(即$4,9,16…$的倍数)+$2$个质数的乘积的平方的倍数的个数(即$36,100,225…$的倍数)……

  不难发现,整个式子其实就是容斥原理的体现,我们可以线筛求出莫比乌斯函数,那么最后的答案就是$ans= \sum \limits_{i=1}^{i^2 \leq n}{ \mu (i) \times \lfloor{\frac{n}{i^2}}\rfloor}$。

  那么线筛只要$\sqrt{10^9}\leq 40000$,然后二分边界$l=k,r=k\times 2$就好了(显然$k$以内最多就是每个数都是无平方因子数,而$2\times k$内的质数大约$\ln {2\times k}个$,大约有$\sum\limits_{i=1}^{\ln {2\times k}}{C(\ln {2\times k},i)}$个,貌似是大于$k$的吧!)

  然后直接求就好了。

  我这里想骚操作一波,所以就对求的式子进行了数论分块,那么只需处理出$\mu$的前缀和就好了,然后对$\lfloor{\frac{n}{i^2}}\rfloor$进行数论分块求。

  事实证明,因为$i\leq 40000$,所以优化效果并不特别明显。(暴力和优化一样快)

  暴力时间复杂度$O(\log n\times \sqrt n)$,优化理论复杂度$O(\log n \times \sqrt{ \sqrt n})$

代码:

#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)>(b)?(b):(a))
const ll N = 40005;
int mu[N+5],prime[N+5],cnt,T,k,m;
bool isprime[N+5],f;il ll gi(){ll a=0;char x=getchar();while(x<'0'||x>'9')x=getchar();while(x>='0'&&x<='9')a=(a<<3)+(a<<1)+x-48,x=getchar();return a;
}using namespace std;il bool check(ll x){ll ans=0;ll p,m=sqrt(x);for(RE ll i=1;i<=m;i=p+1){p=min((ll)(sqrt(x/(x/(i*i)))),m);ans+=x/(i*i)*(mu[p]-mu[i-1]);}return ans>=k;
}il void solve(){ll l=k,r=k<<1,mid;while(l+1<r){mid=l+r>>1;if(check(mid))r=mid;else l=mid;}if(check(l))printf("%lld\n",l);else printf("%lld\n",r);
}int main(){mu[1]=1;For(i,2,N){if(!isprime[i])prime[++cnt]=i,mu[i]=-1;for(int j=1;j<=cnt&&prime[j]*i<=N;j++){isprime[prime[j]*i]=1;if(i%prime[j]==0)break;mu[prime[j]*i]=-mu[i];}}For(i,1,N) mu[i]+=mu[i-1];T=gi();while(T--){k=gi();solve();}return 0;
}

转载于:https://www.cnblogs.com/five20/p/9215690.html

P4318 完全平方数相关推荐

  1. P4318 完全平方数 [二分答案+容斥+莫比乌斯函数]

    完 全 平 方 数 完全平方数 完全平方数 D e s c r i p t i o n \mathcal{Description} Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨 ...

  2. 莫比乌斯反演学习笔记

    背景: 之前不会用MarkdownMarkdownMarkdown,所以坑没有补. 定义: 以下除法默认向下去整. 对于一个形如Fn=∑d∣nfdF_n=\sum_{d|n}f_dFn​=∑d∣n​f ...

  3. 莫比乌斯反演入门题目(详细)

    目录 luoguP2568 GCD hdu1695 GCD luogu3455[POI2007]ZAP-Queries luogu2522 [HAOI2011]Problem b P4318 完全平方 ...

  4. P4318,bzoj2440-完全平方数【二分答案,莫比乌斯函数,容斥】

    正题 题目链接: https://www.luogu.org/problem/P4318 https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题 ...

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

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 3028  Solved: 1460 [Submit][S ...

  6. 完全平方数(打表+二分)

    链接:https://ac.nowcoder.com/acm/contest/5203/C 来源:牛客网 完全平方数 题目描述 多次查询[l,r][l,r][l,r]范围内的完全平方数个数 定义整数x ...

  7. 输出四位完全平方数_LeetCode 题解 | 279. 完全平方数

    力扣 279. 完全平方数 (点击查看题目) 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 ...

  8. PTA 基础编程题目集 6-7 统计某类完全平方数 C语言

    PTA 基础编程题目集 6-7 统计某类完全平方数 C语言 本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int I ...

  9. 【c语言】蓝桥杯算法训练 大等于n的最小完全平方数

    问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数 Tips:注意数据范围 输入格式 一个整数n 输出格式 大等于n的最小的完全平方数 样例输入 ...

最新文章

  1. linux 查看剪贴板历史,Clipboard History Manager插件,查看浏览器剪贴板历史记录
  2. ESXi主机与网络中其他主机的网咯数据包捕获
  3. LVM-HOWTO/学习笔记(二)
  4. python librosa 或 ffmpeg 改变音频采样率
  5. 北师大听讲座-张建华-走近Russia
  6. 从python存入的文件是乱码_如何解决python写入html文件中乱码的现象(图文详解)...
  7. 基础html的网页,[网页设计]HTML基础(五)——
  8. Windows平台手动卸载Oracle Server【完整+干净】
  9. OpenStack版本发布周期或将延长为1年
  10. 将两个(或多个)Item建立关联 app_field.set_dependent_field和app_field.clear_dependent_fields...
  11. anaconda安装-清华镜像库
  12. python共轭梯度法_Numerical Analysis: 共轭梯度法(1)--基本原理
  13. 学校计算机组管理制度,校园一卡通管理结算中心机房管理制度
  14. node.js中操作数据库
  15. 人脸识别-批量裁剪图像
  16. GD32F4xx串口收发,DMA+空闲中断
  17. XTUOJ-1299-String
  18. 程序员笔试之猿辅导招聘2021 编程题收集整理(八)
  19. C语言绘制象棋棋盘/残局
  20. 关于爬取arXiv论坛论文并按照论文主题进行分类的办法

热门文章

  1. 如何使用ember下拉框组件??
  2. 和为s的两个数字与和为s的连续正数序列
  3. 用到lucene的爬虫的简单实现
  4. 如何实现ios屏幕的横竖屏自适应
  5. 提供《华容道与数据结构》代码供测试
  6. 十一Python之路,Day6 - 面向对象学习
  7. SQL Server 中数据查询注意事项
  8. 存储过程 psal emp.sal%type是什么意思
  9. [POJ 1741] Tree
  10. C++实现 找出10000以内的完数