AcWing 算法提高课 筛质数
例题:
1、求区间中的质数
筛质数是O(n)或O(nloglogn)
但是如果n很大,则会超时。
但是如果要筛[l, r]区间中的全部质数
且l和r比较大,但是r-l比较小时。
可以用O(nloglogn)的时间筛出,其中n=sqrt(N)。可以降低时间复杂度。
有对一个数n,如果是合数,则一定有小于sqrt(n)的一个质因子。
利用埃氏筛法的思想:
可以先预处理出sqrt(N)内的全部质数,再用这些质数去筛[l, r]之间的数。
注意不要把质数本身筛掉,且注意处理1
例题:https://www.acwing.com/problem/content/submission/198/
2、求一个阶乘的分解质因子结果
由于阶乘很大,直接分解质因子不行。
但是如果阶乘运算n!的n比较小的话。
可以考虑先筛出1-n中全部的质数,
然后用全部质数p去算1-n中的p的倍数,其中有多少p因子
注意,由于可能会有多个p因子,可以考虑用p、p^2、p^3...筛多次,或者可以在用p筛的时候,直接用除法统计有几个p因子
并累加(因为阶乘会把1-n全部数乘起来,故其质因子分解的结果可以视为将每个数的分解质因子结果相加)。
例题:https://www.acwing.com/problem/content/199/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人