博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2440 [中山市选2011]完全平方数
阅读量:5812 次
发布时间:2019-06-18

本文共 1464 字,大约阅读时间需要 4 分钟。

题目链接

题解

发现答案满足可二分性,考虑二分答案,假设值为xxx,容斥之后发现[1,x][1,x][1,x]中不是完全平方数的个数就是

∑i=1xμ(i)⌊xi2⌋ \sum_{i=1}^{\sqrt{x}} \mu(i)\lfloor\frac{x}{i^2}\rfloor i=1xμ(i)i2x

代码

#include 
int read(){
int x=0,f=1; char ch=getchar(); while((ch<'0')||(ch>'9')) {
if(ch=='-') {
f=-f; } ch=getchar(); } while((ch>='0')&&(ch<='9')) {
x=x*10+ch-'0'; ch=getchar(); } return x*f;}const int maxn=100000;int p[maxn+10],prime[maxn+10],cnt,mu[maxn+10];int getprime(){
p[1]=mu[1]=1; for(int i=2; i<=maxn; ++i) {
if(!p[i]) {
prime[++cnt]=i; mu[i]=-1; } for(int j=1; (j<=cnt)&&(i*prime[j]<=maxn); ++j) {
int x=i*prime[j]; p[x]=1; if(i%prime[j]==0) {
mu[x]=0; break; } mu[x]=-mu[i]; } } return 0;}int T,n;int check(int x){
int ans=0; for(int i=1; i*i<=x; ++i) {
ans+=mu[i]*(x/(i*i)); } return ans;}int main(){
getprime(); T=read(); while(T--) {
n=read(); int l=n,r=n*2; while(l<=r) {
int mid=(1ll*l+r)>>1; if(check(mid)>=n) {
r=mid-1; } else {
l=mid+1; } } printf("%d\n",r+1); } return 0;}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376085.html

你可能感兴趣的文章
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>
shell编程笔记六:实现ll命令
查看>>
【SAP HANA】关于SAP HANA中带层次结构的计算视图Cacultation View创建、激活状况下在系统中生成对象的研究...
查看>>
[nodejs] nodejs开发个人博客(五)分配数据
查看>>
《Linux内核修炼之道》 之 高效学习Linux内核
查看>>
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>
30分钟Git命令“从入门到放弃”
查看>>
nginx : TCP代理和负载均衡的stream模块
查看>>
MYSQL数据库间同步数据
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
让前端小姐姐愉快地开发表单
查看>>
Dubbo笔记(四)
查看>>
Web前端JQuery入门实战案例
查看>>
java B2B2C Springboot电子商城系统- SSO单点登录之OAuth2.0 登出流程(3)
查看>>
USB 通信原理
查看>>
7zZip zip RAR iOS
查看>>
date命令的详细用法!
查看>>
UiAutomator源码分析之UiAutomatorBridge框架
查看>>