6.简单组合数学&简单数论

6.1 分解质因数/判断素数/求因子和/求因子数量

对于任意的正整数而言,其因子一定是两两成对的:若p是x的因子,x/p也一定是x的因子。

所以以上的问题有个共同的解法:O(√x)遍历所有不大于√x的的因子即可。

要注意x的完全平方数的特判。

下面给出求因子和的关键代码:

int i,sum=0;

for(i=1;i*i<x;i++){

if(x%i==0)sum+=i+x/i;   //既计算了因子i,也计算了因子x/i

}

if(i*i==x)sum+=i;          //特判完全平方数

 

6.2 欧拉筛

如何快速得到1到n的所有素数?

可以这样快速筛出来:先将所有2的倍数标记为合数,然后把所有3的倍数标记为合数,然后遇到4,刚刚在2的时候就被标记了,跳过;接下来把所有5的倍数标记为合数……

最终所有没被标记的就是素数了。复杂度为O(nlogn)。

还有一种更优秀的筛法:

对于每个数x,对所

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法笔面试宝典 文章被收录于专栏

算法笔面试真题解析

全部评论

相关推荐

12-20 11:21
复旦大学 Java
点赞 评论 收藏
分享
给🐭🐭个面试机会...:我擦seed✌🏻
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务