找数(线筛,容斥)
2015-08-30 11:08
169 查看
找出第N个最小素因子是P的正整数。
Input
一行两个整数N和P(1<=N,P<=10^9),保证P是素数。
Output
如果结果超过10^9则输出0否则输出这个数。
一看到最小质因子就想到了线筛,每个数只会被其最小质因子筛去。并且只需要筛出p以内的质数。再用p以内的质数去筛,比p小的质数可以筛去不合法的,比p大的质数对我们来说毫无意义。
然而p十分小时,线筛是跑不出来的。
怎么办?
容斥,把p以内的质数搞出来,比如说是a1,a2,a3...a_1,a_2,a_3...(不包括p)
那么二分答案AnsAns
Cnt=ΣAns(P∗aiajak....Jud(Thenumberofa[])),Jud(k)=(kmod2==0?1:−1)Cnt=\Sigma \frac{Ans}{(P*a_ia_ja_k....Jud(Thenumberofa[]))},Jud(k)=( kmod2==0 ? 1 : -1)
根据Cnt值调整Ans
Input
一行两个整数N和P(1<=N,P<=10^9),保证P是素数。
Output
如果结果超过10^9则输出0否则输出这个数。
一看到最小质因子就想到了线筛,每个数只会被其最小质因子筛去。并且只需要筛出p以内的质数。再用p以内的质数去筛,比p小的质数可以筛去不合法的,比p大的质数对我们来说毫无意义。
然而p十分小时,线筛是跑不出来的。
怎么办?
容斥,把p以内的质数搞出来,比如说是a1,a2,a3...a_1,a_2,a_3...(不包括p)
那么二分答案AnsAns
Cnt=ΣAns(P∗aiajak....Jud(Thenumberofa[])),Jud(k)=(kmod2==0?1:−1)Cnt=\Sigma \frac{Ans}{(P*a_ia_ja_k....Jud(Thenumberofa[]))},Jud(k)=( kmod2==0 ? 1 : -1)
根据Cnt值调整Ans
相关文章推荐
- 16位AD,基准电压用3V,4V,5V的区别
- 最大公因数还可以这么玩!!!!
- lOG4j日志的使用
- mysql 视图
- Android Studio 生成UML类图
- 测试初体验及java小结
- 飞思卡尔智能车之摄像头使用篇
- 扑克牌的顺子
- 【经典算法】回溯算法
- MyEclipse中设置jsp页面为默认utf-8编码
- 三分钟理解“外观模式”——设计模式轻松掌握
- java基础面试题(2)
- 整数划分问题(递归法)
- 处理注册信息的小例子(bundle传递数据)
- 用位运算实现四则运算之加减乘除
- 三分钟理解“外观模式”——设计模式轻松掌握
- Bootstrap Modals(模态框)
- ListView 用simpleadapter初始化数据
- linux下修改path
- Android开发——Handler引起的内存泄露