完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)
完全平方数
HYSBZ - 2440
小 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
思路:
首先我们可以在外层套一个二分,把问题转化为判断问题,
即只需要能判断给定一个正整数X,在1~X之间,是否存在mid个数是他喜欢的数。
根据容斥原理,答案就是:0个质数乘积的平方的倍数的数量(1的倍数)- 1个质数乘积的平方的倍数的数量(4,9,25的倍数)+ 2个质数乘积的平方的倍数的数量(36,100的倍数)-3个质数乘积...+ 4个 。。。。。
即加上偶数个质数乘积的平方的倍数个数,减去奇数个质数乘积的平方的倍数个数。
来看下莫比乌斯(Möbius)函数:
对于每个正整数n(n ≥ 2),设它的质因数分解式为:
根据这个式子定义n的莫比乌斯函数为:
给定一个整数X,求在1~X之间,是否存在mid个数是他喜欢的数。
我们可以这样求:
枚举数i在1~sqrt(X)之间
那么i对这个答案的贡献就是 mu[i] * (X/ (i * i))
(X/ (i * i)) 是 在1~X中,有多少个数是i的平方的倍数。
而他对答案是加还是减,即系数就恰好是u(i),u()是莫比乌斯函数。
外层正常的套路二分即可。
又因为莫比乌斯函数是一个积性函数,所以可以直接线筛出来。
不会的话可以百度搜几篇关于莫比乌斯函数和对应的线筛写法即可。
细节见代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
#define du3(a,b,c) scanf("%d %d %d",&(a),&(b),&(c))
#define du2(a,b) scanf("%d %d",&(a),&(b))
#define du1(a) scanf("%d",&(a));
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {a %= MOD; if (a == 0ll) {return 0ll;} ll ans = 1; while (b) {if (b & 1) {ans = ans * a % MOD;} a = a * a % MOD; b >>= 1;} return ans;}
void Pv(const vector<int> &V) {int Len = sz(V); for (int i = 0; i < Len; ++i) {printf("%d", V[i] ); if (i != Len - 1) {printf(" ");} else {printf("\n");}}}
void Pvl(const vector<ll> &V) {int Len = sz(V); for (int i = 0; i < Len; ++i) {printf("%lld", V[i] ); if (i != Len - 1) {printf(" ");} else {printf("\n");}}}inline void getInt(int *p);
const int N = 1000010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
bool vis[N];
long long prim[N], mu[N], sum[N], cnt;
void get_mu(long long n)
{mu[1] = 1;for (long long i = 2; i <= n; i++) {if (!vis[i]) {mu[i] = -1; prim[++cnt] = i;}for (long long j = 1; j <= cnt && i * prim[j] <= n; j++) {vis[i * prim[j]] = 1;if (i % prim[j] == 0) { break; }else { mu[i * prim[j]] = -mu[i]; }}}for (long long i = 1; i <= n; i++) { sum[i] = sum[i - 1] + mu[i]; }
}
ll getnum(ll mid)
{ll q = (sqrt(mid) + eps);ll res = 0ll;for (ll i = 1ll; i <= q; ++i) {res += mu[i] * (mid / (i * i));}return res;
}
ll solve(ll x)
{ll l = 1ll;ll r = x << 1;ll mid;ll ans;while (l <= r) {mid = (l + r) >> 1;if (getnum(mid) < x) {l = mid + 1ll;} else {r = mid - 1ll;ans = mid;}}return ans;
}
int main()
{//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);get_mu(N - 1);int t;du1(t);while (t--) {ll n;scanf("%lld", &n);printf("%lld\n", solve(n) );// solve(n)}return 0;
}inline void getInt(int *p)
{char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}} else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}
转载于:https://www.cnblogs.com/qieqiemin/p/11537681.html
完全平方数 HYSBZ - 2440 (莫比乌斯函数容斥)相关推荐
- Comet OJ - Contest #8 E神奇函数(莫比乌斯函数容斥)
Comet OJ - Contest #8 E神奇函数(莫比乌斯函数容斥) 题目大意 定义d(x)d(x)d(x)的值为x的最小素因子,定义 f(x)={1x=1d(x)f(xd2(x))x>1 ...
- P4318,bzoj2440-完全平方数【二分答案,莫比乌斯函数,容斥】
正题 题目链接: https://www.luogu.org/problem/P4318 https://www.lydsy.com/JudgeOnline/problem.php?id=2440 题 ...
- F - Tmutarakan Exams URAL - 1091 -莫比乌斯函数-容斥 or DP计数
F - Tmutarakan Exams 题意 : 从 < = S 的 数 中 选 出 K 个 不 同 的 数 并 且 gcd > 1 .求方案数. 思路 :记 录 一 下 每 个 数 ...
- Relatively Prime Powers CodeForces - 1036F (莫比乌斯函数容斥)
Relatively Prime Powers CodeForces - 1036F Consider some positive integer xx. Its prime factorizatio ...
- hdu1695(莫比乌斯)或欧拉函数+容斥
题意:求1-b和1-d之内各选一个数组成数对.问最大公约数为k的数对有多少个,数对是有序的.(b,d,k<=100000) 解法1: 这个能够简化成1-b/k 和1-d/k 的互质有序数对的个数 ...
- P4318-莫比乌斯函数+容斥
前言: 这题告诉我们莫比乌斯函数是平方数容斥的容斥系数. 题目大意: T T T组询问,问你第 k k k个不含平方因子的数. 题目思路:二分答案+容斥 先二分答案 m i d mid mid,问题转 ...
- BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- 莫比乌斯反演/容斥 +2020ICPC 江西省大学生程序设计竞赛 A Simple Math Problem
题目描述 输入描述: 输出描述: 示例1 输入 3 输出 5 分析: 1.这个题其实考的是一个莫比乌斯反演题,但是由于我知识储备不够,没有看出来,题目给的范围可以瞎搞一下,所以下面容斥可以过. 2.转 ...
- bzoj 2440: [中山市选2011]完全平方数(二分+莫比乌斯函数)
2440: [中山市选2011]完全平方数 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 4018 Solved: 1952 [Submit][S ...
最新文章
- Linux memcached 安装
- 抽象工厂模式(abstract factory)
- Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
- 包含多个段的程序---汇编学习笔记
- 理解单例模式、单例类
- LeetCode 1317. 将整数转换为两个无零整数的和
- 【转载保存】什么是线程阻塞?为什么会出现线程阻塞?
- 小程序 | 云函数获取用户openid
- Oracle/PLSQL WHERE CURRENT OF Statement
- 数据只会告诉你该怎么走
- 开源大数据:Databricks Lakehouse
- 使用python爬取文库文档
- CTPN论文翻译——中英文对照
- 电脑使用ps很卡该怎么办,ps如何设置才不会卡
- 俄罗斯方块是java_俄罗斯方块(java版)
- 39 Flutter仿京东商城项目 收货地址列表、增加 修改收货地址布局、弹出省市区选择器...
- GPON标准简要解析
- np.arange()和 range()的用法及区别
- 朋友可以分成三大类 对付虚伪的人3招
- Java实现简单的扫雷小程序
热门文章
- 用SAP BSP应用实现图片灰度效果
- 一个12年ABAP开发专家和ABAP那些事儿
- Kubernetes本地集群和Google Kubernetes Engine的区别
- SAP Spartacus B2B 页面popover对话框的渲染逻辑
- MongoDB最简单的入门教程之二 使用nodejs访问MongoDB
- access和python哪个难学-access和python学哪个好一点
- 中心极限定理_High Dimensional Probability(1) 中心极限定理
- 2038问题 linux_Linux 文件系统类型导览
- 开发java程序的步骤_开发 Java 程序的一般步骤是:源程序编辑、 和 。_学小易找答案...
- ros安装过后怎么找不到安装文件_ros配置乐视奥比中光相机