当前位置:网站首页>LeetCode 1175. 质数排列(质数判断+组合数学)
LeetCode 1175. 质数排列(质数判断+组合数学)
2022-07-02 05:01:00 【xylitolz】
0 题目

1 解题思路
1.1 质数判断+组合数学
本 题 总 的 方 案 数 = 「 所 有 质 数 都 放 在 质 数 索 引 上 的 方 案 数 」 × 「 所 有 合 数 都 放 在 合 数 索 引 上 的 方 案 数 」 本题总的方案数=「所有质数都放在质数索引上的方案数」\times \\ 「所有合数都放在合数索引上的方案数」 本题总的方案数=「所有质数都放在质数索引上的方案数」×「所有合数都放在合数索引上的方案数」
「所有质数都放在质数索引上的方案数」:
- 首先求出 [ 1 , n ] [1,n] [1,n]范围内所有质数的个数 p r i m e N u m primeNum primeNum
- 枚举100以内所有质数+二分
- 试除法
- 再求出质数个数 primeNum \textit{primeNum} primeNum 的阶乘即为方案数
「所有合数都放在合数索引上的方案数」:
- n − p r i m e N u m n - primeNum n−primeNum即为所有合数的个数,再求其阶乘即为方案数
排列:
A ( m , n ) = n ! ( n − m ) ! A(m, n) = \frac{n!}{(n - m)!} A(m,n)=(n−m)!n!组合:
C ( m , n ) = n ! m ! × ( n − m ) ! C(m, n) = \frac{n!}{m! \times (n - m)!} C(m,n)=m!×(n−m)!n!
1.1.1 代码实现
1.1.1.1 枚举100以内所有质数+二分
class Solution {
// 枚举100以内所有质数
private static int[] PRIME = {
2, 3, 5, 7,
11, 13, 17, 19,
23, 29,
31, 37,
41, 43, 47,
53, 59,
61, 67,
71, 73, 79,
83, 89,
97};
private static final int MOD = 1000000007;
public int numPrimeArrangements(int n) {
// 利用二分求取质数个数
int primeNum = binarySearch(n) + 1;
// 利用阶乘求方案数
return (int) (calcFactorial(primeNum) * calcFactorial(n - primeNum) % MOD) ;
}
private long calcFactorial(int m) {
long res = 1;
while (m != 0) {
res *= m;
res %= MOD;
m--;
}
return res;
}
private int binarySearch(int n) {
int left = 0, right = PRIME.length - 1;
while (left < right) {
int mid = left + (right - left + 1) / 2;
if (PRIME[mid] > n) {
right = mid - 1;
} else {
left = mid;
}
}
return left;
}
}
1.1.1.2 试除法
class Solution {
private static final int MOD = 1000000007;
public int numPrimeArrangements(int n) {
// 试除法求取质数个数
int primeNum = 0;
for (int i = 1; i <= n; i++) {
if (isPrime(i)) {
primeNum++;
}
}
// 利用阶乘求方案数
return (int) (calcFactorial(primeNum) * calcFactorial(n - primeNum) % MOD);
}
public boolean isPrime(int n) {
if (n == 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
public long calcFactorial(int n) {
long res = 1;
for (int i = 1; i <= n; i++) {
res *= i;
res %= MOD;
}
return res;
}
}
2 Reference
边栏推荐
- Leetcode merge sort linked list
- A new attribute value must be added to the entity entity class in the code, but there is no corresponding column in the database table
- Virtual machine installation deepin system
- Online incremental migration of DM database
- 数学知识——快速幂的理解及例题
- Summary of main account information of zhengdaliu 4
- C - derived classes and constructors
- 初学爬虫-笔趣阁爬虫
- [understand one article] FD_ Use of set
- Mysql database learning
猜你喜欢

Steam教育的实际问题解决能力

idea自动导包和自动删包设置
![[bus interface] Axi interface](/img/ee/95ade7811ec2c37fb67a77f0b6ae2a.jpg)
[bus interface] Axi interface

How do I interview for a successful software testing position? If you want to get a high salary, you must see the offer

idea自動導包和自動删包設置

Markdown edit syntax

Save the CDA from the disc to the computer

Idea autoguide package and autodelete package Settings

Unity particle Foundation

How to modify data file path in DM database
随机推荐
[high speed bus] Introduction to jesd204b
GeoTrust ov multi domain SSL certificate is 2100 yuan a year. How many domain names does it contain?
画波形图_数字IC
数据库问题汇总
Use of Baidu map
What are the rules and trading hours of agricultural futures contracts? How much is the handling fee deposit?
Use of typescript classes
Interview question: do you know the difference between deep copy and shallow copy? What is a reference copy?
Mapping settings in elk (8) es
Its appearance makes competitors tremble. Interpretation of Sony vision-s 02 products
Orthogonal test method and function diagram method for test case design
培养中小学生对教育机器人的热爱之心
Simple and practical accounting software, so that accounts can be checked
C# 基于MQTTNet的服务端与客户端通信案例
Go Chan's underlying principles
Detailed process of DC-1 range construction and penetration practice (DC range Series)
Leetcode- insert and sort the linked list
CubeMx DMA笔记
Future trend of automated testing ----- self healing technology
[opencv] image binarization