leetcode5173.质数排列
先来道leetcode题目指路:
leetcode5173.质数排列
请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你
需要返回可能的方案总数。
让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。
由于答案可能会很大,所以请你返回答案 模 mod 10^9 + 7 之后的结果即可。
输入:n = 5
输出:12
解释:举个例子,[1,2,5,4,3] 是一个有效的排列,但 [5,2,3,4,1] 不是,因为在第二种情况里质数 5 被错误地放在索引
为 1 的位置上。
答案倒是好想,贴一下js代码:
var numPrimeArrangements = function(n) {
let baseNum = Math.pow(10,9) + 7;
let nums = new Array(n+1).fill(0);
if(n <= 2){ return 1; }
nums[2] = 1;
let PrimeNum = function(i){//为了求出[0-i]中质数个数
for(let j = 2;j < i ;j++){
if(i % j === 0){
nums[i] = nums[i-1];
return ;
}
}
nums[i] = nums[i-1] + 1;
}
let vec = new Array(n).fill(1);//为了求出i的全排列
for(let i = 2;i<n ;i++){
vec[i] = vec[i-1]*i%baseNum;
}
for(let i = 3 ; i <= n; i++){
PrimeNum(i);
}
return ( vec[nums[n]]*vec[n - nums[n]] ) % baseNum;//全排列乘积
};
但是,挂了emmm
js 中有最大安全数,精度位数是 53bit。 安全数的意思是在
-2^53 ~ 2^53
内的整数(不包括边界)
参考链接: