热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【BZOJ2440】2440:[中山市选2011]完全平方数(二分+容斥原理+莫比乌斯函数)

2440:[中山市选2011]完全平方数Description小X自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些数看起来很令人难受。由此,

2440: [中山市选2011]完全平方数

Description

小 X 自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些
数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而
这丝毫不影响他对其他数的热爱。 
这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一
个小X讨厌的数。他列出了所有小X不讨厌的数,然后选取了第 K个数送给了
小X。小X很开心地收下了。 
然而现在小 W 却记不起送给小X的是哪个数了。你能帮他一下吗?

Input

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

Output

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

Sample Input

4
1
13
100
1234567

Sample Output

1
19
163
2030745

HINT

对于 100%的数据有 1 ≤ Ki ≤ 10^9

,    T ≤ 50

Source

【分析】
之前做的,现在竟然想不到了。。
二分。。。首先要知道这个数不会大于2*k【why?
然后求小于等于mid的有多少个满足的数。
可以知道如果这个数是某个数的平方的倍数,那么他分解质因数之后一定有一个的质数大于等于2
这里要想到容斥原理,就是ans=n-n/(2*2)-n/(3*3)-...+n/(6*6)+...-...+...
6因为是2和3的倍数,分解质因数之后有两个质因数,所以在容斥里面是加。
跟莫比乌斯函数很像吧?它的系数就是莫比乌斯函数啊,想想定义、、
真是太妙了【以后要多做点容斥的题目
这样是只要算到根号n的

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std;
9 #define Maxn 100010
10 #define LL long long
11
12 LL mu[Maxn],pri[Maxn],pl;
13 bool q[Maxn];
14
15 LL mymin(LL x,LL y) {return xx:y;}
16
17 void get_mu(LL mx)
18 {
19 pl=0;
20 memset(q,1,sizeof(q));
21 mu[1]=1;
22 for(LL i&#61;2;i<&#61;mx;i&#43;&#43;)
23 {
24 if(q[i])
25 {
26 pri[&#43;&#43;pl]&#61;i;
27 mu[i]&#61;-1;
28 }
29 for(LL j&#61;1;j<&#61;pl;j&#43;&#43;)
30 {
31 if(i*pri[j]>mx) break;
32 q[i*pri[j]]&#61;0;
33 if(i%pri[j]&#61;&#61;0) mu[i*pri[j]]&#61;0;
34 else mu[i*pri[j]]&#61;-mu[i];
35 if(i%pri[j]&#61;&#61;0) break;
36 }
37 }
38
39 }
40
41 LL get_ans(LL n)
42 {
43 LL ans&#61;0;
44 LL sq&#61;(LL)ceil(sqrt((double)n));
45 for(LL i&#61;1;i<&#61;mymin(sq,n);i&#43;&#43;)
46 {
47 ans&#43;&#61;mu[i]*(n/(i*i));
48 }
49
50 return ans;
51 }
52
53 LL ffind(LL k)
54 {
55 LL l&#61;1,r&#61;k*2;
56 while(l<r)
57 {
58 LL mid&#61;(l&#43;r)>>1;
59 if(get_ans(mid)>&#61;k) r&#61;mid;
60 else l&#61;mid&#43;1;
61 }
62 return l;
63 }
64
65 int main()
66 {
67 int T;
68 T&#61;1;
69 scanf("%d",&T);
70 get_mu(100000);
71 while(T--)
72 {
73 LL n;
74 scanf("%lld",&n);
75
76 LL ans&#61;ffind(n);
77
78 printf("%lld\n",ans);
79 }
80 return 0;
81 }

View Code

 

2017-03-23 10:27:20


转:https://www.cnblogs.com/Konjakmoyu/p/6603768.html



推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • 在开发app时,使用了butterknife后,在androidStudio打包apk时可能会遇到报错。为了解决这个问题,可以通过打开proguard-rules.pro文件进行代码混淆来解决。本文介绍了具体的混淆代码和方法。 ... [详细]
  • 本文讨论了一个数列求和问题,该数列按照一定规律生成。通过观察数列的规律,我们可以得出求解该问题的算法。具体算法为计算前n项i*f[i]的和,其中f[i]表示数列中有i个数字。根据参考的思路,我们可以将算法的时间复杂度控制在O(n),即计算到5e5即可满足1e9的要求。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
beauty360尜囡囡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有