当前位置: 首页 > news >正文

bzoj2440(莫比乌斯函数)

bzoj2440

题意

求第 k 个不是完全平方数(除 1 以外)的正倍数的数。

分析

利用二分法求解,二分 x ,判断 x 是否是第 k 个数即可,那么我们就要计算 [1, x] 有几个符合条件的数。
首先本题用到容斥原理的思想,
sum = 1 的倍数的数的个数 - (4, 8, 9, ) 这些质因子个数为 1 的平方的倍数的数的个数 + (36, ) 这些质因子个数为 2 的平方的倍数的数的个数 ...

而根据莫比乌斯函数 \(\mu(n)\) 的定义:
\(n = p_1 ^ {k_1} \cdot p_2 ^ {k_2} \cdot\cdots\cdot p_m ^ {k_m}\) ,其中 p 为素数,则定义如下:
\(\mu(n) = \begin{cases} 1 & n = 1 \\ (-1) ^ m & \prod\limits_{i = 1} ^ {m} k_i = 1 \\ 0 & \textrm{otherwise}(k_i \gt 1) \end{cases}\)
最终得到下面的式子:
\(sum = \sum_{i=1}^{\left \lfloor \sqrt{x} \right \rfloor}\mu(i)\left \lfloor \frac{x}{i^{2}}\right \rfloor\)

我们可以通过线性筛来求出莫比乌斯函数的值。

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e6 + 10;
int not_prime[MAXN];
int prime[MAXN];
int mu[MAXN];
void getMu() {
    mu[1] = 1;
    int cnt = 0;
    for(int i = 2; i < MAXN; i++) {
        if(!not_prime[i]) {
            prime[cnt++] = i;
            mu[i] = -1;
        }
        for(int j = 0; i * prime[j] < MAXN; j++) {
            not_prime[i * prime[j]] = 1;
            if(i % prime[j] == 0) {
                mu[i * prime[j]] = 0;
                break;
            }
            mu[i * prime[j]] = -mu[i];
        }
    }
}
ll cal(ll x) {
    ll s = 0;
    for(ll i = 1; i * i <= x; i++) {
        s += mu[i] * (ll)(x / (i * i));
    }
    return s;
}
int main() {
    getMu();
    int T;
    cin >> T;
    while(T--) {
        ll k;
        cin >> k;
        ll l = 1, r = 1e10, mid = (l + r) / 2;
        while(l < r) {
            if(cal(mid) >= k) r = mid;
            else l = mid + 1;
            mid = (l + r) / 2;
        }
        cout << mid << endl;
    }
    return 0;
}

转载于:https://www.cnblogs.com/ftae/p/6995466.html

相关文章:

  • 避免用uedit之类的可以直接看到字符串常量
  • 【Cocos2d-x 017】 多分辨率适配全然解析
  • 我会常回来看看的
  • 没有对比就没有伤害!有一种爸爸叫别人家的爸爸
  • 微软技术通 1.0 beta 全部命令列表
  • Ansible 进阶技巧
  • samba_AD
  • LinkedList
  • 校园网的安全防护
  • mysql性能优化注意事项以及索引
  • 最新apache多域名多站点配置
  • 几个爆酷Silverlight应用程序
  • open_basedir php文件包含目录配置
  • 脑残的MSN 9 卸载程序
  • lvs之 lvs原理架构介绍
  • 【前端学习】-粗谈选择器
  • axios 和 cookie 的那些事
  • CSS盒模型深入
  • IP路由与转发
  • Java 网络编程(2):UDP 的使用
  • Laravel 菜鸟晋级之路
  • PAT A1050
  • Python十分钟制作属于你自己的个性logo
  • 前端之React实战:创建跨平台的项目架构
  • 使用parted解决大于2T的磁盘分区
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 原生 js 实现移动端 Touch 滑动反弹
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 阿里云服务器如何修改远程端口?
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (2022 CVPR) Unbiased Teacher v2
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (二十三)Flask之高频面试点
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (九)信息融合方式简介
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)http协议
  • (转)关于pipe()的详细解析
  • **python多态
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET和.COM和.CN域名区别
  • [ C++ ] 继承
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • []Telit UC864E 拨号上网
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [BZOJ]4817: [Sdoi2017]树点涂色