热门标签 | 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



推荐阅读
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
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社区 版权所有