美文网首页我爱编程
编程算法 - 能被1至n整除的最小数(js)

编程算法 - 能被1至n整除的最小数(js)

作者: One_Hund | 来源:发表于2018-04-09 23:49 被阅读0次

题意:求出能整除[1,n]中所有数的最小整数,结果对987654321取模。

思路:求出能整除[1,n]中所有数的最小整数,即求出能整除[1,n]中所有素数的最小整数,步骤如下:
1.首先筛选出[1,n]的所有素数,记为primeList[i]。
2.根据算术基本定理:“任何一个合数都可以分解为几个素数的积”,求出每一个Pn的kn值,如下所示:

  • 假设Pn表示第n个素数,那么任意正整数可以通过下面的式子获得:


  • Kn 的取值:要保证最终值可以被所有含Pn约数的数整除(如下面例子,要保证Num既能被2整除,也能被4,8整除),因此公式为:primeList[i]^k<=n
  • 例如:一个整数要能被1-10的所有整数整除,那么就等同于他能被1-10之间的所有素数整除。那么此时:



    3.求出各素数次幂的积,即求出Num。

JS代码如下:

var readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
rl.on('line',function(line){
    let n = parseInt(line.trim());
    let prime=primeNum(n);
    let arr=[];
    let result=1;
    for(let i=0,len=prime.length;i<len;i++) {
        for(let j=1;;j++){
            if(Math.pow(prime[i],j)>n){
                arr.push(Math.pow(prime[i],j-1));
                break;
            }
        }
    }
    for(let k=0;k<arr.length;k++) {
        result=result*arr[k];
        if(result>987654321) {
            result=result%987654321;
        }
    }
    result=result%987654321;
    console.log(result)
})
function primeNum(n) {
    let primeList = [];
    if(n>=2) {
        primeList.push(2);
    }
    for (let i = 3; i <= n; i+=2) {
        if (isPrimeNum(i,primeList)){
            primeList.push(i);
        }
    }
    return primeList;
}
function isPrimeNum(num,primeList) {
    for(let i = 3,j = 1; i <= Math.sqrt(num); i = primeList[j++]){
        if(num % i == 0){
            return false;
        }
    }
    return true;
}

相关文章

  • 编程算法 - 能被1至n整除的最小数(js)

    题意:求出能整除[1,n]中所有数的最小整数,结果对987654321取模。 思路:求出能整除[1,n]中所有数的...

  • day5 作业

    读程序,总结程序的功能: 2**n (1

  • Sherlock and Divisors

    题目大意: 给定一个数N,求N的因子中能被2整除的个数。算法: 循环1N,找出每个因子看是否能被整除,复杂度O(N...

  • C语言闰年的表达

    闰年就是能被4整除且不能被100整除或者可以被400整除的年份。即:if((n%4==0&&n%100!=)||n...

  • 判断闰年?-c语言描述

    闰年:1、能被4整除,但不能被100整除 2、能被100整除,且能被400整除 ``` #includ...

  • 分解素因数——2. 整除问题

    整除问题 题目描述 给定n,a求最大的k,使n!可以被ak整除但不能被a(k+1)整除。 输入描述: 两个整数n(...

  • 质数问题

    给定一个数n(n >=2),判断是否为质数 最简单的方法 若n不能被2至n-1之间的任意一个数整除则为质数 2.降...

  • day04 作业 2018-07-19

    基础 读程序,总结程序的功能: 计算2^20 统计[1,100]之间能被3或7整除且不能被21整除的整数个数 编程...

  • SQFREE - Square-free integers

    题目链接mobius||容斥原理 题目大意 求出1~n中不能被“完全平方数”(不含1)整除的数的个数。 算法分析 ...

  • 逻辑分支和嵌套三目运算

    问题:找出1~100中所有能被3整除,或者能被5整除,或者既能被3整除又能被5整除的数。   如果只是单纯的问题求...

网友评论

    本文标题:编程算法 - 能被1至n整除的最小数(js)

    本文链接:https://www.haomeiwen.com/subject/rwewhftx.html