首页 > 其他分享 >2021杭电多校10 D.Pty hates prime numbers题解

2021杭电多校10 D.Pty hates prime numbers题解

时间:2024-07-14 16:54:05浏览次数:7  
标签:prime 杭电多校 题解 质数 容斥 枚举 个数 质因数

前言

暑期第三次组队赛是选的21年杭电多校10,遗憾爆0,被对面队打爆,赛后狠狠补题。这道题的题解,以及网上搜到的其他题解看了好久没看懂,在问了队里大腿多次后,总算磨出来了,这里讲一下我的理解。

题意

多次询问,每次给定 \(n\) 和 \(k\), 如果一个数的质因数里包括前 \(k\) 个质数,则这个数是 讨厌 的,问 \(1\) 到 \(n\) 中有多少个数是不讨厌的。
数据范围 \(1 \leq n \leq 10^{18}, 1 \leq k \leq 16\)

思路

首先直接 \(2^k\) 的枚举质因数,然后容斥,这个是简单的。具体来说就是直接dfs 爆搜,枚举每个质因数选或者不选,选的话就乘上这个数,最终得到一个 \(x\) 以及 容斥系数 \(f\) ,容斥系数根据选的质因数的奇偶性,决定是 \(1\) 或者 \(-1\)。然后将答案加上 \(1 - n\) 中是 \(x\) 的倍数的个数乘 \(f\)。

通过这个容斥, 我们能得到的是 1 - n 中不是前k个质数倍数的个数,这句话,以及题解里面也是类似的描述,有一点歧义的地方。不是前k个质数的倍数,意思是质因数不包含前 k 个质数。而不是,不是前k个质数的乘积的倍数(因为题解里面多次强调了前8个质数的乘积9699690,就容易误解不是前8个质数倍数,指不是9699690倍数)。

然后因为 \(k\) 的数据范围是16,所以直接这样 \(2^k\) 容斥枚举是T的,因为多测次数很多。所以正解的思路是,先对前8个质数进行容斥枚举,预处理出一个数组 \(sum[i]\) 表示 \(1\) 到 \(i\) 中,质因数不包含前8个质数的数字个数。然后只对第 \(8\) 到第 \(k\) 个质数进行枚举容斥。

就是这个什么叫只对后面几个数进行容斥,把我控了很久,因为普通的容斥,肯定是考虑前面和后面,总的选的数的个数,决定正负啥的。

然后我是这样去理解:
对一些位去容斥,最终目的是为了求出,1 - n 中不包含这些质因数的数字个数。然后我们对 9 到 k位去容斥,所以保证了这些数一定不包含9 到 k个质因数,然后我们只需要再保证这些数不包含前8个质因数,那这些数就是符合题意的。换言之,就是在容斥后几位的同时,保证能忽略掉前8位的影响。

然后具体的,由于容斥过程中,我们枚举了哪些质因数得到乘积 \(x\) 之后,我们要求的反而是 \(1 - n\) 中是 \(x\) 的倍数的个数。

因为是对后几个质因数容斥,所以我们要求的是 \(1-n\) 中是枚举到的后几个质因数的倍数的个数,因为忽略了前8位,所以我们还得保证求出来的这些数不能有前 8个质因数。也就是,通过容斥计算 \(1-n\) 不含后几位质因数的数量,在整个容斥过程中,还保证了全程枚举到的数不包含前 \(8\) 个质因数,所以最终算出来的就是前 \(k\) 个质因数都不包含的总数。

在后几位的容斥过程中,假如枚举到的乘积是 \(x\) ,问题转化为求 \(1-n\) 中是 \(x\) 的倍数,并且不包含前 \(8\) 个质因数的数字个数。
由于是 \(x\) 倍数,所以这些数 \(x, 2x, 3x \dots\) 一定能表示成 \(kx (1 \leq k \leq \lfloor \frac{n}{k} \rfloor)\) ,因为 \(x\) 是后几个质因数倍数,所以肯定不含前 \(8\) 个质因子。所以我们相当于,求 \(1 - \frac{n}{k}\) 中,有多少个数不含前 \(8\) 个质因数,这个问题等价于求 \(n_1 = \frac{n}{k}, k_1 = 8\) 的子问题了。所以可以预处理 \(k=8\) 的所有答案。

然后由于 \(n\) 很大,没办法预处理 \(n = 1 - 10^{18}, k = 8\) 的所有答案,这时候还需要发现一个性质。 由于前8个质因数的乘积,或者说是最小公倍数是9699690, 假设有一个比较大的 \(n\), 画在数轴上,把有前 \(8\) 个质因数的点 \(i\) 标1,那么显然这些数的 \(lcm\) 就是一个循环节,所以 这个很大的 \(n\) 的答案等于拥有这些循环节的个数乘上一个循环节的答案,加上多出来那一截 \(n \mod lcm\) 对应的答案。(从这个循环节和数轴的角度,感觉比较好理解题解里面那个为什么要取余 lcm)

所以得到题解里面那个式子,这里的答案指的是 \(k = 8\) 时,\(1-n\) 中不含前 \(8\) 个质因数的数字个数。
题解式子
然后就是代码了

标签:prime,杭电多校,题解,质数,容斥,枚举,个数,质因数
From: https://www.cnblogs.com/TJUHuangTao/p/18301748

相关文章

  • NSIS 之 NsDialogs 常见问题解答
    如何启用/禁用控件使用标准NSIS EnableWindow 命令。NSDialogs允许您弹出通过 ${NSD_Create*} 创建的控件的 hwnd (句柄)。EnableWindow 将 hwnd 作为其参数之一。通过它,您可以轻松启用/禁用控件。  !include"nsDialogs.nsh"!include"winmessages.nsh"!incl......
  • 题解:AT_abc362_d [ABC362D] Shortest Path 3
    一句话题意:给定一个带点权的有权无向连通图,求点1到所有其它点的最短路径。首先,只有1一个起点,所以是单源最短路,又因为最大是\(2\times10^5\),所以是优先队列(堆)优化过后的Dijkstra。所以,我们只需要解决点权的问题就好了。一种显而易见的想法是把与这条边的边权加上起终点......
  • 题解:CodeForces 346A Alice and Bob[博弈/数论]
    CodeForces346AA.AliceandBobtimelimitpertest2secondsmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputItissoboringinthesummerholiday,isn'tit?SoAliceandBobhaveinventedanewgametoplay.Therulesa......
  • 题解:CodeForces 843A Sorting by Subsequences[模拟/排序]
    CodeForces843AA.SortingbySubsequencestimelimitpertest:1secondmemorylimitpertest:256megabytesinputstandardinputoutputstandardoutputYouaregivenasequence\(a_1, a_2, ..., a_n\)consistingofdifferentintegers.Itisrequiredtos......
  • 题解:CodeForces 618C Constellation[贪心/模拟]
    CodeForces618CC.Constellationtimelimitpertest:2secondsmemorylimitpertest:256megabytesinputstandardinputoutputstandardoutputCatNokuhasobtainedamapofthenightsky.Onthismap,hefoundaconstellationwithnstarsnumberedfrom......
  • 题解:CodeForces 835 D Palindromic characteristics[区间dp/马拉车Manacher]
    CodeForces835DD.Palindromiccharacteristicstimelimitpertest:3secondsmemorylimitpertest:256megabytes*inputstandardinputoutputstandardoutputPalindromiccharacteristicsofstring\(s\)withlength\(|s|\)isasequenceof\(|s|\)in......
  • 题解:CodeForces 1019 A Elections[贪心/三分]
    CodeForces1019AA.Electionstimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputAsyouknow,majorityofstudentsandteachersofSummerInformaticsSchoolliveinBerlandforthemostparto......
  • [CF1941E] Rudolf and k Bridges 的题解
    题目大意在第\((i,j)\)个格子修建一个桥墩需要\(a_{i,j}+1\)的花费而且要求\((i,0)\)与\((i,m)\)必须修建桥墩并且桥墩之间的距离不得大于\(d\)。现在需要求见\(k\)个连续的桥,求最小代价。其中\(1\lek\len\le100,3\lem\le2\cdot10,1\led\lem\)。思路因为......
  • [ABC206E] Divide Both 的题解
    题目大意求出从\(l\)至\(r\)中满足以下条件的\((x,y)\)的个数。\(\gcd(x,y)\ne1\)且\(\gcd(x,y)\nex\)且\(\gcd(x,y)\ney\)。其中\(1\lel\ler\le10^6\)。思路正难则反,所以可以求出所有互质或者是相互倍数的\((x,y)\)的对数,在将其减去所有的方案数就是......
  • [CF1178D] Prime Graph 的题解
    题目大意构造一个简单无向图,是所有的有度的点的度都是质数而且总共的边的数量的个数是质数。思路因为需要让所有的入度都为质数,所以我们可以找到两个相邻的质数\(2,3\),因为这样即使增加了一条边那么这个节点的度也是质数。先将这个图构成一个巨大的环,接着如果所有的边数并不......