题解【bzoj2440 [中山市选2011]完全平方数】
Description
求第 \(k\) 个不含平方因子的正整数。多组询问。\(k \leq 10^9, T \leq 50\)
Solution
网上的题解几乎都是容斥,这里给一个简单的也挺快的做法。
首先二分答案,然后问题转化成前 \(n\) 个数中有几个不含平方因子的数。
[\(n\) 不含平方因子] \(=\mu^2(n)\)
所以要求的就是 \(\sum\limits_{i=1}^{n}\mu^{2}(i)=\sum\limits_{i=1}^{n}\sum\limits_{d^2|i}\mu(d)=\sum\limits_{d=1}^{\sqrt n}\mu(d)\lfloor\frac{n}{d^2}\rfloor\)
直接筛出 \(\sqrt n\) 以内的所有 \(\mu\) 然后直接 \(\sqrt n\) 算就可以了
非常简单好写,没有啥细节...
复杂度 \(O(T (\sqrt n) (\log n))\) 所以数据范围可以到 1e12 的2333
Code
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll INF = 2 * 1e9;
const int N = 100000;
int T; ll k;
int p[N + 50], flag[N + 50], cnt, mu[N + 50];
inline void prework() {
  mu[1] = 1; flag[1] = 1;
  for(int i = 2; i <= N; i++) {
    if(!flag[i]) {
      mu[i] = -1; p[++cnt] = i;
    } for(int j = 1; j <= cnt && i * p[j] <= N; j++) {
      flag[i * p[j]] = 1;
      if(i % p[j] == 0) {
        mu[i * p[j]] = 0; break ;
      } mu[i * p[j]] = mu[i] * -1;
    }
  }
}
inline bool check(ll n) {
  ll ret = 0;
  for(ll d = 1; d * d <= n; d++)
    ret += (n / (d * d)) * mu[d];
  return ret >= k;
}
int main() {
  scanf("%d", &T); prework();
  while(T--) {
    scanf("%lld", &k);
    ll l = 0, r = k * 2, ans;
    while(l <= r) {
      ll mid = (l + r) / 2;
      if(check(mid)) r = mid - 1, ans = mid;
      else l = mid + 1;
    } printf("%lld\n", ans);
  }
  return 0;
}
题解【bzoj2440 [中山市选2011]完全平方数】的更多相关文章
- BZOJ2440: [中山市选2011]完全平方数(莫比乌斯+容斥原理)
		2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4920 Solved: 2389[Submit][Sta ... 
- BZOJ2440 中山市选2011完全平方数(容斥原理+莫比乌斯函数)
		如果能够知道不大于n的合法数有多少个,显然就可以二分答案了. 考虑怎么求这个.容易想到容斥,即枚举完全平方数.我们知道莫比乌斯函数就是此种容斥系数.筛出来就可以了. 注意二分时会爆int. #incl ... 
- BZOJ2440 [中山市选2011]完全平方数
		本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ... 
- 2019.02.09 bzoj2440: [中山市选2011]完全平方数(二分答案+容斥原理)
		传送门 题意简述:qqq次询问(q≤500)(q\le500)(q≤500),每次问第kkk个不被除111以外的完全平方数整除的数是多少(k≤1e9)(k\le1e9)(k≤1e9). 思路:考虑二分 ... 
- BZOJ2440:[中山市选2011]完全平方数(莫比乌斯函数)
		Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ... 
- bzoj2440 [中山市选2011]完全平方数——莫比乌斯+容斥
		题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2440 莫比乌斯...被难倒... 看TJ:http://hzwer.com/4827.htm ... 
- BZOJ2440: [中山市选2011]完全平方数 容斥原理_莫比乌斯函数
		emmm....... 数学题都不友好QAQ...... Code: #include <cstdio> #include <algorithm> #include <c ... 
- 【学术篇】bzoj2440 [中山市选2011]完全平方数
		-题目の传送门- 题目大意: 找到第k个无平方因子数. 看到数据范围很大, 我们要采用比\(O(n)\)还要小的做法. 考虑如果前\(x\)个数中有\(k-1\)个无平方因子数, 而前\(x+1\)个 ... 
- BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数
		BZOJ 2440 [中山市选2011]完全平方数 | 莫比乌斯函数 题面 找出第k个不是平方数的倍数的数(1不是平方数, \(k \le 10^9\)). 题解 首先二分答案,问题就转化成了求\([ ... 
随机推荐
- redis 为什么快
			redis采用自己实现的事件分离器,效率比较高,内部采用非阻塞的执行方式,吞吐能力比较大. 不过,因为一般的内存操作都是简单存取操作,线程占用时间相对较短,主要问题在io上,因此,redis这种模型是 ... 
- asp.net mvc 使用Ajax调用Action 返回数据【转】
			使用asp.net mvc 调用Action方法很简单. 一.无参数方法. 1.首先,引入jquery-1.5.1.min.js 脚本,根据版本不同大家自行选择. <script src=& ... 
- Centos 关闭图形界面
			查看/etc/inittab如下: # systemd uses 'targets' instead of runlevels. # by default, there are two main ta ... 
- VIM字符编码基础知识
			1 字符编码基础知识 字符编码是计算机技术中最基本和最重要的知识之一.如果缺乏相关知识,请自行恶补之.这里仅做最简要的说明. 1.1 字符编码概述 所谓的字符编码,就是对人类发明的每一个文字进行数字 ... 
- 02-JAVA  初始化
			构造器 概念:在创建对象时被自动调用的方法,构造器采用和类名一样的名称 创建对象时,会为其分配存储空间,并调用相应的构造器进行初始化.这就确保了在操作对象之前,这个对象已经被恰当的初始化了. 不接受仁 ... 
- C++对象模型 多重继承与虚函数表
			一 多重继承 1) 代码: Code#include <iostream>using namespace std; class B1{public: int x; virtua ... 
- OSG学习:阴影代码示例
			效果图: 代码示例: #include <osgViewer/Viewer> #include <osg/Node> #include <osg/Geode> #i ... 
- 【Leetcode】72 Edit Distance
			72. Edit Distance Given two words word1 and word2, find the minimum number of steps required to conv ... 
- 利用Docker安装Web前端性能测试工具Sitespeed.io
			目录结构 一.Sitespeed.io概述 1.Sitespeed.io简介 2.Sitespeed.io使用场景 二.Sitespeed.io的安装和使用 1.安装Sitespeed.io 2.连接 ... 
- DataTable Excel 导出:
			public static class CSVFileHelper { public static string ToHtmlTable(this DataTable target) { return ... 
