1 条题解
-
0
自动搬运
来自洛谷,原作者为

Silence_water
天天向上,追逐梦想搬运于
2025-08-24 22:28:22,当前版本为作者最后更新于2021-02-06 12:46:44,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
给定两组正整数 和 。判断 能否被 整除。
为了描述方便,令 ,。
对于整除类的题目,容易想到当 时,对于每个在 中出现的质因数 必在 中出现,且在 中出现次数更多。那么我们可以对 和 进行分解质因数,然后计算质因数 出现次数并比较。
对于本题,由于 为多数相乘,且范围较大,考虑通过计算出质因子 在 中出现的次数和在 中出现的次数。那么将两者相减就是 在 中出现的次数。为了方便枚举质因子,这里用欧拉筛法将所有质数线性筛出。
注意到 中质因子 的数量等于 中 的数量和。
证明:(摘自 网络)
在 中, 的倍数,即至少包含 个质因子 的有 个。
而 的倍数,即至少包含 个质因子 的有 个。但其中至少包含 个质因子已经在 里统计过,所以只需要再统计第 个质因子,即累加上 ,而不是 。
综上所述, 中质因子 的个数为:
$$\lfloor \frac{n}{p}\rfloor+\lfloor \frac{n}{p^2}\rfloor+\lfloor \frac{n}{p^3}\rfloor+\lfloor \frac{n}{p^{\lfloor{\log_p} n\rfloor}}\rfloor=\sum\limits_{p^k\le n}{\lfloor \frac{n}{p^k}\rfloor} $$
欧拉筛法部分是板子,此处就不放了。
计算质因子出现次数部分如下:
int count(int x,int a) { int sum=0; while(x) { sum+=x/a; x/=a; } return sum; }判断整除部分如下:
for(int i=1;i<=cnt&&pri[i]<=b;i++) { int a_b=count(b,pri[i])-count(a-1,pri[i]); int c_d=count(d,pri[i])-count(c-1,pri[i]); if(a_b>c_d) { sol=false; break; } }
客官看完别忘了点个赞哦~
- 1
信息
- ID
- 6406
- 时间
- 1500ms
- 内存
- 500MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者