#数论# 快速分解质因数的技巧 && 筛法求素数(快速筛)

快速分解质因数

在做题时经常遇到要分解质因数,那么如何快速分解质因数呢?

在用筛法求素数时,我们使用线性筛的方法,并在每次筛的过程中,记录下每个数的最小质因数。那么在分解质因数的时候,只需要不断除以当前数的最小质因数,就可以快速得到分解的质因数了。

给出一个简单的例子,比如我们要求 50 这个数的质因数:

首先,利用线性筛找到所有的素数,并记录非素数的最小质因数,然后再将数字 50 除以他的最小质因子(也就是2)得到 25,然后再将数字 25 除以他的最小质因子(也就是5)得到 5,到这为止就做完啦,50 的质因数就是 2 和 5。

 

筛法求素数

一般的线性筛法

这种方法比较好理解:初始时,假设全部都是素数,当找到一个素数时,显然这个素数乘上另外一个数之后就一定是合数(注意上面的 i*i , 比 i*2 要快点 ),把这些合数都筛掉,即算法名字的由来。 但仔细分析能发现,这种方法会造成重复筛除合数,影响效率。比如10,在 i = 2 的时候,k = 2*15 筛了一次;在 i=5,k=5*6 的时候又筛了一次。所以,也就有了快速线性筛法。

void make_prime()
{
    memset(prime, 1, sizeof(prime));
    prime[0] = prime[1] = 0;
    for(int i =
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值