当前位置:网站首页>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
边栏推荐
- Lm09 Fisher inverse transform inversion mesh strategy
- How to write a client-side technical solution
- VMware installation win10 reports an error: operating system not found
- UNET deployment based on deepstream
- How to configure PostgreSQL 12.9 to allow remote connections
- What data does the main account of Zhengda Meiou 4 pay attention to?
- 【ClickHouse】How to create index for Map Type Column or one key of it?
- Promise all()
- Domestic all Chinese automatic test software apifox
- 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
猜你喜欢

Pit encountered in win11 pytorch GPU installation

VMware installation win10 reports an error: operating system not found

Promise all()

Solution of DM database unable to open graphical interface

Summary of common string processing functions in C language

Win10 disk management compressed volume cannot be started

Markdown edit syntax

奠定少儿编程成为基础学科的原理

正大美欧4的主账户关注什么数据?

正大留4的主账户信息汇总
随机推荐
leetcode存在重复元素go实现
Lay the foundation for children's programming to become a basic discipline
js面试收藏试题1
Win10 disk management compressed volume cannot be started
[Yu Yue education] autumn 2021 reference materials of Tongji University
Mysql database learning
Leetcode basic programming: array
Fasttext text text classification
正大美欧4的主账户关注什么数据?
go实现leetcode旋转数组
Markdown edit syntax
Embedded-c language-9-makefile/ structure / Consortium
Introduction to Luogu 3 [circular structure] problem list solution
UNET deployment based on deepstream
Let genuine SMS pressure measurement open source code
初学爬虫-笔趣阁爬虫
Getting started with pytest ----- confitest Application of PY
[high speed bus] Introduction to jesd204b
Go GC garbage collection notes (three color mark)
Summary of MySQL key challenges (2)