当前位置:网站首页>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
边栏推荐
- Ruby replaces gem Alibaba image
- Case sharing | intelligent Western Airport
- Pyflink writes MySQL examples with JDBC
- Simple and practical accounting software, so that accounts can be checked
- Starting from the classification of database, I understand the map database
- Cubemx DMA notes
- Idea automatic package import and automatic package deletion settings
- Record the bug of unity 2020.3.31f1 once
- Domestic all Chinese automatic test software apifox
- 2022 Alibaba global mathematics competition, question 4, huhushengwei (blind box problem, truck problem) solution ideas
猜你喜欢

Future trend of automated testing ----- self healing technology

解决:代理抛出异常错误

Virtual machine installation deepin system

Learn BeanShell before you dare to say you know JMeter

el-cascader回显只选中不显示的问题

Save the CDA from the disc to the computer

Acelems Expressway microgrid energy efficiency management platform and intelligent lighting solution intelligent lighting tunnel

Cultivate primary and secondary school students' love for educational robots

Starting from the classification of database, I understand the map database

Leetcode- insert and sort the linked list
随机推荐
数据库问题汇总
VMware installation win10 reports an error: operating system not found
[opencv] image binarization
C# 图片显示占用问题
数学知识(欧拉函数)
Several methods of capturing packets under CS framework
关于Steam 教育的知识整理
Common errors of dmrman offline backup
Promise all()
Pytest learning ----- pytest Interface Association framework encapsulation of interface automation testing
Cubemx DMA notes
Record the bug of unity 2020.3.31f1 once
DC-1靶场搭建及渗透实战详细过程(DC靶场系列)
函数中使用sizeof(arr) / sizeof(arr[0])求数组长度不正确的原因
Cannot activate CONDA virtual environment in vscode
DMA Porter
Mathematical knowledge (Euler function)
正大美欧4的主账户关注什么数据?
C case of communication between server and client based on mqttnet
Mathematical knowledge -- understanding and examples of fast power