1175.质数排列
链接:1175.质数排列
难度:Easy
标签:数学
简介:请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。
题解 1 - typescript
- 编辑时间:2021-12-04
- 执行用时:88ms
- 内存消耗:39.5MB
- 编程语言:typescript
- 解法介绍:算出质数位置进行阶乘。
function numPrimeArrangements(n: number): number {
const MOD = BigInt(10 ** 9 + 7);
const cnt = count(n);
return Number((factorial(cnt) * factorial(n - cnt)) % MOD);
function count(n: number): number {
const arr: boolean[] = new Array(n + 1).fill(true);
arr[0] = arr[1] = false;
for (let i = 2; i <= n; i++) {
if (!arr[i]) continue;
for (let j = 2; i * j <= n; j++) arr[i * j] = false;
}
return arr.filter(Boolean).length;
}
function factorial(n: number): bigint {
let ans = 1n;
for (let i = 2n; i <= n; i++) ans = (ans * i) % MOD;
return ans;
}
}