4524: [Cqoi2016]伪光滑数 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 183  Solved: 82[Submit][Status][Discuss] Description 若一个大于R的整数J的质因数分解有F项,其最大的质因子为ak,并且满足ak^k≤N, ak<128,我们就称整数J为N-伪光滑数. 现在给出L,求所有整数中,第E大的N-伪光滑数. Input 只有一行,为用空格隔开的整数L和E. 2 ≤ N ≤ 10^1…
目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ @details@ @description@ 若一个大于 1 的整数 M 的质因数分解有 k 项,其最大的质因子为 \(A_k\),并且满足 \(A_k^k \le N\),\(A_k < 128\),我们就称整数 M 为 N - 伪光滑数. 现在给出 N,求所有整数中第 K 大的 N - 伪光滑…
[BZOJ4524][Cqoi2016]伪光滑数 Description 若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M为N-伪光滑数.现在给出N,求所有整数中,第K大的N-伪光滑数. Input 只有一行,为用空格隔开的整数N和K 2 ≤ N ≤ 10^18, 1 ≤ K ≤ 800000,保证至少有 K 个满足要求的数 Output 只有一行,为一个整数,表示答案. Sample Input 12345 20 Sample…
2021.08.01 P4359 伪光滑数(二叉堆) [P4359 CQOI2016]伪光滑数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 若一个大于 11 的整数 MM 的质因数分解有 k 项,其最大的质因子为 a_k,并且满足 \[a_{k}^{k} ≤N,a_k < 128 \] ,我们就称整数 M 为 N - 伪光滑数. 现在给出 NN,求所有整数中,第 KK 大的 NN - 伪光滑数. 分析: 在k一定时,如果已知p_maxn,则val_maxn=k*p_…
Loj 2047 伪光滑数 正解较复杂,但这道题其实可以通过暴力解决. 预处理出 \(128\) 内的所有质数,把 \(n\) 内的 \(prime[i]^j\) 丢进堆中,再尝试对每个数变形,除一个质因子,再乘一个. 保证最大值因子的次数为正就可以了,取 \(k\) 次堆顶即得答案. #include<bits/stdc++.h> using namespace std; #define ll long long #define mp make_pair #define pii pair&l…
对于每个质数求出其作为最大质因子时最多能有几个质因子,开始时将这些ak1~akmaxk扔进堆.考虑构造方案,使得每次取出最大值后,最大质因子.质因子数均与其相同且恰好比它小的数都在堆里.类似暴搜,对于当前考虑的质因子,可以将其去掉并乘上一个恰好比它小的小的质因子,也可以转而考虑下一个质因子.于是给堆中元素记录当前考虑的质因子.最小质因子,每次进行两种更新即可. 正解似乎是可持久化可并堆+dp,当然不会. #include<iostream> #include<cstdio> #in…
题目描述 若一个大于1的整数M的质因数分解有k项,其最大的质因子为Ak,并且满足Ak^K<=N,Ak<128,我们就称整数M为N-伪 光滑数.现在给出N,求所有整数中,第K大的N-伪光滑数. 题解 题面的k意思是将这个数质因数分解后所有的质因子的指数和. 我们先把128以内的所有素数找出来,然后做一个dp. 我们令dp[i][j]表示当前数的最大的质因子为p[i],当前所有素因子的指数和为j的数的集合. 我们再令g[i][j]表示当指数和位j时,所有最大质因子小于等于p[i]的数的集合. 然后…
BZOJ上的题面很乱,这里有一个题面. 题解: 正解是可持久化可并堆+DP,可惜我不会... 但暴力也可过这道题. 先在不超过N的前提下,在大根堆里加入每个质数的J次方,1<=j, 然后就可以发现,当前的堆里有着不超过N的最大值. 然后每次找到堆顶,用这个数除以一次原来的质数乘上一次比它小的质数,把新数全部加入堆中. 按照这样的方式构造出第K优解. #include<iostream> #include<cstdio> #include<cstring> #inc…
Description 若一个大于 \(1\) 的整数 \(M\) 的质因数分解有 \(k\) 项,其最大的质因子为 \(Ak\) ,并且满足 \(Ak^K \leq N\) , \(Ak<128\) ,我们就称整数 \(M\) 为 \(N-\) 伪光滑数.现在给出 \(N\) ,求所有整数中,第 \(K\) 大的 \(N-\) 伪光滑数. Input 只有一行,为用空格隔开的整数 \(N\) 和 \(K\) \(2 \leq N \leq 10^18\) ,\(1 \leq K \leq 80…
题解 可持久化可并堆 用\(f[i,j]\)表示最大的质数标号为i,然后有j个质数乘起来 用\(g[i,j]\)表示\(\sum_{k = 1}^{i}f[k,j]\) 转移是 \(f[i,j] = \sum_{k= 1}^{j} g[i - 1,j - k] * p_{i}^{k}\) \(g[i,j] += f[i,j]\) 这就要资瓷两个集合的合并了 可是集合显然非常大,我们可以用可持久化来帮助完成这件事,就完成了 代码 #include <bits/stdc++.h> #define…