zoukankan      html  css  js  c++  java
  • 质数

    质数在日常开发中应用不多,然而在算法中却经常出现,在此记录两种求质数的方法。
    
    1. 思路:按照定义,质数是只能被1和自身整除的数,只要循环判断即可。
    
    let isPrime = true // 假设是质数
    for (let i = 2; i < target; i++) {
      if(target%i==0){
        isPrime = false; // 一旦被整除,则不是质数
        break;
      }
    }
    /** 在 i<target 这一步,其实不用循环到target,因为在后一半循环中是不会有target的因数的,因此可以简化为 i <= target/2;
    更近一步的,target理论上最大的因数就是Math.squrt(target), 所以最终可以简化为
    i <= Math.squrt(target)  **/2. 另一种思路:首先找到一定范围内的合数,在此范围内不是合数的自然是质数。
    
    let max = 2e6
    let sieve = Array(max).fill(true) // 假设2e6范围内全部是质数
    sieve[0] = sieve[1] = false
    for (let i = 2; i < max; ++i) {
        if (!sieve[i]) continue;
        for (let j = i * i; j < max; j += i) sieve[j] = false // 判断为合数
    }
    let primes = []
    for (let i = 2; i < max; ++i) if (sieve[i]) primes.push(i)
    //  primes为2e6范围内的质数
    
    
    如果是判断某数是否质数,当然第一种思路最恰当。但如果需要判断多个质数、或范围内的质数时,不妨先把质数求出来,再做处理。
  • 相关阅读:
    持续集成(转)
    Java中前台JSP请求Servlet实例(http+Servlet)
    Java中Map集合的四种访问方式(转)
    Python中字符串操作
    Python中的range函数用法
    Python学习资料下载地址(转)
    Linux性能工具介绍
    性能问题定位方法
    录制脚本前需要理解的几个基本概念
    Python 硬件底层基础理论
  • 原文地址:https://www.cnblogs.com/diyichen/p/11515220.html
Copyright © 2011-2022 走看看