P4318 完全平方数
题目描述
小 X 自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而这丝毫不影响他对其他数的热爱。
这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一个小X讨厌的数。他列出了所有小X不讨厌的数,然后选取了第 K个数送给了小X。小X很开心地收下了。
然而现在小 W 却记不起送给小X的是哪个数了。你能帮他一下吗?
输入输出格式
输入格式:
包含多组测试数据。文件第一行有一个整数 TT ,表示测试数据的组数。 第 22 至第 T+1T+1 行每行有一个整数 K_iKi ,描述一组数据,含义如题目中所描述。
输出格式:
含T 行,分别对每组数据作出回答。第 ii 行输出相应的第 K_iKi 个不是完全平方数的正整数倍的数。
输入输出样例
4 1 13 100 1234567
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 完全平方数相关推荐
- P4318 完全平方数 [二分答案+容斥+莫比乌斯函数]
完 全 平 方 数 完全平方数 完全平方数 D e s c r i p t i o n \mathcal{Description} Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨 ...
- 莫比乌斯反演学习笔记
背景: 之前不会用MarkdownMarkdownMarkdown,所以坑没有补. 定义: 以下除法默认向下去整. 对于一个形如Fn=∑d∣nfdF_n=\sum_{d|n}f_dFn=∑d∣nf ...
- 莫比乌斯反演入门题目(详细)
目录 luoguP2568 GCD hdu1695 GCD luogu3455[POI2007]ZAP-Queries luogu2522 [HAOI2011]Problem b P4318 完全平方 ...
- P4318,bzoj2440-完全平方数【二分答案,莫比乌斯函数,容斥】
正题 题目链接: https://www.luogu.org/problem/P4318 https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题 ...
- BZOJ 2440: [中山市选2011]完全平方数 [容斥原理 莫比乌斯函数]
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3028 Solved: 1460 [Submit][S ...
- 完全平方数(打表+二分)
链接:https://ac.nowcoder.com/acm/contest/5203/C 来源:牛客网 完全平方数 题目描述 多次查询[l,r][l,r][l,r]范围内的完全平方数个数 定义整数x ...
- 输出四位完全平方数_LeetCode 题解 | 279. 完全平方数
力扣 279. 完全平方数 (点击查看题目) 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 ...
- PTA 基础编程题目集 6-7 统计某类完全平方数 C语言
PTA 基础编程题目集 6-7 统计某类完全平方数 C语言 本题要求实现一个函数,判断任一给定整数N是否满足条件:它是完全平方数,又至少有两位数字相同,如144.676等. 函数接口定义: int I ...
- 【c语言】蓝桥杯算法训练 大等于n的最小完全平方数
问题描述 输出大等于n的最小的完全平方数. 若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数 Tips:注意数据范围 输入格式 一个整数n 输出格式 大等于n的最小的完全平方数 样例输入 ...
最新文章
- linux 查看剪贴板历史,Clipboard History Manager插件,查看浏览器剪贴板历史记录
- ESXi主机与网络中其他主机的网咯数据包捕获
- LVM-HOWTO/学习笔记(二)
- python librosa 或 ffmpeg 改变音频采样率
- 北师大听讲座-张建华-走近Russia
- 从python存入的文件是乱码_如何解决python写入html文件中乱码的现象(图文详解)...
- 基础html的网页,[网页设计]HTML基础(五)——
- Windows平台手动卸载Oracle Server【完整+干净】
- OpenStack版本发布周期或将延长为1年
- 将两个(或多个)Item建立关联 app_field.set_dependent_field和app_field.clear_dependent_fields...
- anaconda安装-清华镜像库
- python共轭梯度法_Numerical Analysis: 共轭梯度法(1)--基本原理
- 学校计算机组管理制度,校园一卡通管理结算中心机房管理制度
- node.js中操作数据库
- 人脸识别-批量裁剪图像
- GD32F4xx串口收发,DMA+空闲中断
- XTUOJ-1299-String
- 程序员笔试之猿辅导招聘2021 编程题收集整理(八)
- C语言绘制象棋棋盘/残局
- 关于爬取arXiv论坛论文并按照论文主题进行分类的办法