题意

\(T\)组数据,每次询问第\(k\)个无平方因子的数(\(1\)不算平方因子),\(T\leq 50,k\leq 10^9\)

题解

\(k\)的范围很大,枚举肯定不行,也没什么奇妙性质,于是可以想到二分。

二分的话我们需要实现一个函数\(f(n)\)表示\(n\)以内的数中无平方因子的数个数

这十分经典,相当于求\(f(n)=\sum_{i=1}^n\mu^2(i)\)

解法就是:我们考虑一个质数\(p\),\(p^2\)的倍数都不满足要求,也就是说答案得减去\(\lfloor \frac{n}{p^2}\rfloor\)。但显然这个会重复,需要容斥。就是说一个数\(x=p_1p_2..p_k\),答案得加上\((-1)^k \lfloor \frac{n}{x^2}\rfloor\)。

然后就会神奇地发现对于一个正整数\(i\)它的贡献的系数恰好就是\(\mu(i)\)!

也就是说答案就是\(\sum_{i=1}^{\sqrt n} \mu(i) \lfloor \frac{n}{i^2}\rfloor\) 。预处理\(\mu\)前缀和然后数论分块就好。

分块那里有一点小细节,与常见数论分块不大一样。还有二分的右边界,可以设为\(k\)的\(4\)倍,实际上观察样例就可以猜到\(2\)倍就可以了。

复杂度为大致为\(O(T\sqrt k\log k)\)

#include <algorithm>
#include <cstdio>
#include <cmath>
using namespace std; typedef long long ll; const int N = 64000; int mu[N + 5], p[N + 5], cnt;
bool tag[N + 5]; void sieve(int n) {
mu[1] = 1;
for(int i = 2; i <= n; i ++) {
if(!tag[i]) {
p[cnt ++] = i;
mu[i] = -1;
}
for(int j = 0; j < cnt; j ++) {
if(i * p[j] > n) break ;
tag[i * p[j]] = 1;
if(i % p[j] == 0) {
mu[i * p[j]] = 0;
break ;
}
mu[i * p[j]] = - mu[i];
}
}
for(int i = 2; i <= n; i ++) mu[i] += mu[i - 1];
} ll calc(ll n) {
ll x = (ll) sqrt(n), ans = 0;
for(ll i = 1, j; i * i <= n; i = j + 1) {
j = sqrt(n / (n / (i * i)));
if(j > x) j = x;
ans += (mu[j] - mu[i - 1]) * (n / (i * i));
}
return ans;
} int main() {
sieve(N);
int t, k; scanf("%d", &t);
while(t --) {
scanf("%d", &k);
ll l = 1, r = 4e9, mid, ans = -1;
while(l <= r) {
mid = (l + r) >> 1;
if(calc(mid) >= k) r = (ans = mid) - 1;
else l = mid + 1;
}
printf("%lld\n", ans);
}
return 0;
}

「BZOJ 2440」完全平方数「数论分块」的更多相关文章

  1. bzoj 3834 [Poi2014]Solar Panels 数论分块

    3834: [Poi2014]Solar Panels Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 285[Submit] ...

  2. bzoj 1257 [CQOI2007]余数之和——数论分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 \( n\%i = n - \left \lfloor n/i \right \rfl ...

  3. BZOJ2301/LG2522 「HAOI2011」Problem B 莫比乌斯反演 数论分块

    问题描述 BZOJ2301 LG2522 积性函数 若函数 \(f(x)\) 满足对于任意两个最大公约数为 \(1\) 的数 \(m,n\) ,有 \(f(mn)=f(m) \times f(n)\) ...

  4. 「BZOJ 2956」模积和

    「BZOJ 2956」模积和 令 \(l=\min(n,m)\).这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即: \[\begin{aligned} &\sum_{i=1 ...

  5. 「BZOJ 4228」Tibbar的后花园

    「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 ...

  6. 「BZOJ 3645」小朋友与二叉树

    「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) ...

  7. 「BZOJ 4502」串

    「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段 ...

  8. 「BZOJ 4289」 PA2012 Tax

    「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \( ...

  9. 「BZOJ 2534」 L - gap字符串

    「BZOJ 2534」 L - gap字符串 题目描述 有一种形如 \(uv u\) 形式的字符串,其中 \(u\) 是非空字符串,且 \(v\) 的长度正好为 \(L\), 那么称这个字符串为 \( ...

随机推荐

  1. phpstorm下载和破解

    http://idea.qinxi1992.cn/ 官网下载对应版本,在下面进行破解! storm官网:https://www.jetbrains.com/phpstorm/ 破解网址  :http: ...

  2. 对oracle中date/timestamp的操作

    设置oracle中date的会话格式为 'yyyy-mm-dd hh24:mi:ss' alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss ...

  3. Doubango简介-sip

    Welcome Android http://code.google.com/p/imsdroid/ http://code.google.com/p/imsdroid/source/browse/# ...

  4. 杂项:C# 方法、属性杂项-01

    ylbtech-杂项:C# 方法.属性杂项-01 1. 属性杂项返回顶部 1. public int ReadCnt { get; set; } 2.设置默认值 public int ReadCnt ...

  5. RPCServiceClient-调用webservice客户端

    import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.address ...

  6. HeapCreate深入研究

    本机:win7(x86),4G内存 #include"stdafx.h"#include<windows.h>#include<stdio.h>#inclu ...

  7. redis学习四 复制

    1,单机创建多实例 一个redis服务器安装多个redis实例,每个实例对应一个端口.默认端口是6379. 将redis.conf配置文件复制一份到另外一个文件夹下,然后修改其中的信息即可.   pi ...

  8. java 多线程系列基础篇(七)之线程休眠

    1. sleep()介绍 sleep() 定义在Thread.java中.sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”.sleep()会指定休眠时间,线 ...

  9. 通过XmlSerializer接口来生成xml文件

    xml文件我们可以用来保存一些数据.例如用来备份短信.这个例子中,我们就用XmlSerializer接口来实现一个备份短信的程序.当然了,为了程序简单化,这个程序我们并不是真的去备份短信.我们通过一个 ...

  10. 转载-你应该知道的 RPC 原理

    在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...