LeetCode每日一题——1175. 质数排列

简介: 请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。

题目

请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。

让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。

由于答案可能会很大,所以请你返回答案 模 mod 10^9 + 7 之后的结果即可。

示例

示例 1:

输入:n = 5

输出:12

解释:举个例子,[1,2,5,4,3] 是一个有效的排列,但 [5,2,3,4,1]不是,因为在第二种情况里质数 5 被错误地放在索引为 1 的位置上。

示例 2:

输入:n = 100

输出:682289015

思路

质数和非质数分别对应相应的坐标,需要保证质数位上都是质数、非质数位上都是非质数,对质数和非质数分开求排列最后相乘即可。具体做法是:

  • 先求所有的质数个数
  • 数量为n的数列排列数目为n的阶乘
  • 求出质数排列与非质数排列相乘

题解

class Solution:
    def numPrimeArrangements(self, n: int) -> int:
        temp = 0
        # 求出质数个数
        for i in range(2, n+1):
            judge = True
            for j in range(2, floor(sqrt(i))+1):
                if i % j == 0:
                    judge = False
                    break
            if judge:
                temp += 1
        # 求质数与非质数排列的乘积
        sum = 1
        for i in range(1, temp+1):
            sum *= i
        for i in range(1, n-temp+1):
            sum *= i
        return sum % (10 ** 9 + 7)
目录
相关文章
|
7月前
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
【Leetcode -441.排列硬币 -448.找到所有数组中消失的数字】
26 0
|
7月前
|
程序员
【Leetcode】面试题 01.02. 判定是否互为字符重排、面试题 01.04. 回文排列
目录 面试题 01.02. 判定是否互为字符重排 面试题 01.04. 回文排列
36 0
|
2天前
|
JavaScript
【leetcode】204. 计数质数 暴力 & 埃拉托斯特尼法
【leetcode】204. 计数质数 暴力 & 埃拉托斯特尼法
13 0
|
7月前
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
26 0
|
2天前
|
Go
golang力扣leetcode 937.重新排列日志文件
golang力扣leetcode 937.重新排列日志文件
30 0
|
2天前
|
Go
golang力扣leetcode 31.下一个排列
golang力扣leetcode 31.下一个排列
22 0
|
2天前
|
Go
golang力扣leetcode 567.字符串的排列
golang力扣leetcode 567.字符串的排列
21 0
|
2天前
|
算法
【LeetCode】31. 下一个排列【中等】
【LeetCode】31. 下一个排列【中等】
|
2天前
|
机器学习/深度学习 算法 vr&ar
☆打卡算法☆LeetCode 204. 计数质数 算法解析
☆打卡算法☆LeetCode 204. 计数质数 算法解析
|
9月前
|
算法
LeetCode 算法 | 如何排列硬币?
LeetCode 算法 | 如何排列硬币?