每日一题——LeetCode1175.质数排列

方法一 数学规律

其实题目的意思就是1-n里面本来是质数的位置只能放质数,非质数的位置只能放非质数,那么就把质数和非质数的排列分开考虑,假设有x个质数,根据数学的排列规律,那么这么质数的排列方案 数量为x的阶乘,同理非质数的排列为(n-x)的阶乘

所以这道题就是求质数的个数然后求两个阶乘的积

但是要注意对10^9+7取模,且应该是循环求阶乘时对每次循环的结果取模,不能只用最后的阶乘取模

javascript 复制代码
const mod = 1000000007;
var numPrimeArrangements = function(n) {
    var prime=0,res=1
    for(let i=2;i<=n;i++){
        if(isPrime(i)){ 
            prime++
        }
    }
    console.log(prime)
    var composite=n-prime
   while (prime > 0) {
        res = res % mod;
        res *= prime;
        prime--;
    }
    while (composite > 0) {
        res = res % mod;
        res *= composite;
        composite--;
    }
    
   return res
};

function isPrime(n) {
    if (n === 1) {
        return false;
    }
    for (let i = 2; i * i <= n; i++) {
        if (n % i === 0) {
            return false;
        }
    }
    return true;
}

消耗时间和内存情况:

相关推荐
谈笑也风生17 小时前
经典算法题详解之切分数组(一)
数据结构·算法·leetcode
pixle017 小时前
从零学习Node.js框架Koa 【七】Koa实战:构建企业级邮箱验证注册系统
javascript·学习·node.js·koa·注册·全栈·邮箱注册
松涛和鸣17 小时前
28、Linux文件IO与标准IO详解:从概念到实战
linux·网络·数据结构·算法·链表·list
长安er17 小时前
LeetCode 167/15 两数之和与三数之和-双指针1
算法·leetcode·双指针·两数之和·三数之和
小明记账簿17 小时前
解锁前端新技能:让JavaScript与CSS变量共舞
前端·javascript·css
Hello娃的17 小时前
【神经网络】反向传播BP算法
人工智能·神经网络·算法
lynnlovemin17 小时前
从暴力到高效:C++ 算法优化实战 —— 排序与双指针篇
java·c++·算法
jinxinyuuuus17 小时前
快手在线去水印:短链解析、API逆向与视频流的元数据重构
前端·人工智能·算法·重构
Flash.kkl17 小时前
优先算法专题十五——BFS_FloodFill
算法·宽度优先
高洁0117 小时前
向量数据库拥抱大模型
python·深度学习·算法·机器学习·transformer