请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。
让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。
由于答案可能会很大,所以请你返回答案 模 mod 10^9 + 7 之后的结果即可。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/prime-arrangements
思路:本题没什么难点,需要注意的是最后结果较大,如果用int保存则会溢出,需要用long暂存结果,并且在阶乘过程中,每一步都需要mod,不然也会溢出。
代码如下:
class Solution {
static final int MOD=1000000007;
public int numPrimeArrangements(int n) {
int count=0;
if(n==1){
return 1;
}
for(int i=2;i<=n;i++){
if(judge(i)){
count++;
}
}
return (int)((stageMul(count)*stageMul(n-count))%MOD);
}
public long stageMul(int n){
long ans=1;
for(int i=1;i<=n;i++){
ans*=i;
ans%=MOD;
}
return ans;
}
public boolean judge(int n){
for(int i=2;i*i<=n;i++){
if(n%i==0){
return false;
}
}
return true;
}
}
613

被折叠的 条评论
为什么被折叠?



