GESP编程共123题,本题是整站第1403题,已经有人完成了本题,加油!
小杨同学想寻找一种名为 B-smooth 数的正整数。
如果一个正整数的最大质因子不超过 B,则该正整数为 B-smooth 数。小杨同学想知道,对于给定的 n 和 B,有多少个不超过 n 的 B-smooth 数。
第一行包含两个正整数 n 和 B,含义如题面所示。
输出一个非负整数,表示不超过 n 的 B-smooth 数的数量。
输入 #1
10 3
输出 #1
7
子任务 | 得分 | n≤ | B |
---|---|---|---|
1 | 30 | 10^3 | 1≤B≤10^3 |
2 | 30 | 10^6 | n≤B≤10^6 |
3 | 40 | 10^6 | 1≤B≤10^6 |
对全部的测试数据,保证 1≤n,B≤10^6。
【题目大意】给定n和B,求解有多少个<=n的最大质因子不超过B的B-smooth数
【考纲知识点】唯一分解定理
【解题思路】
①比较朴素的思路为循环遍历1~n,对于每个i,对其分解质因子,得到最大质因子,将质因子和B作比较,并统计到答案中,该算法循环复杂度为O(n),调用分解质因子的复杂度为O(sqrt(n)),总体复杂度为O(nsqrt(n)),加上需要初始化等常数操作,通过1e6的数据是比较危险的。
②考虑在筛法求素数时,对素数P,其倍数都包含素因子P,可以在筛掉素因子P的倍数的同时,用P更新这些倍数的最大素因子。埃式筛法没问题,当然也可以选择欧拉线性筛进一步将复杂度降低为线性。
【参考程序】
本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。