当前位置:网站首页>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
边栏推荐
- Summary of main account information of zhengdaliu 4
- 数据库问题汇总
- Idea autoguide package and autodelete package Settings
- Idea automatic package import and automatic package deletion settings
- 正大美欧4的主账户关注什么数据?
- idea自动导包和自动删包设置
- TypeScript函数详解
- el-cascader回显只选中不显示的问题
- win10 磁盘管理 压缩卷 无法启动问题
- Virtual machine installation deepin system
猜你喜欢

Rhcsa --- work on the fourth day

Pit encountered in win11 pytorch GPU installation

Unity particle Foundation

win10 磁盘管理 压缩卷 无法启动问题

10 minute quick start UI automation ----- puppeter

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

Pytest learning ----- pytest Interface Association framework encapsulation of interface automation testing

数学知识(欧拉函数)
![[common error] the DDR type of FPGA device is selected incorrectly](/img/f3/be66bcfafeed581add6d48654dfe34.jpg)
[common error] the DDR type of FPGA device is selected incorrectly

Super detailed pycharm tutorial
随机推荐
将光盘中的cda保存到电脑中
MMAP zero copy knowledge point notes
正大留4的主账户信息汇总
The El cascader echo only selects the questions that are not displayed
Oracle和MySQL的基本区别(入门级)
Getting started with pytest ----- confitest Application of PY
Ruby replaces gem Alibaba image
06 decorator mode
数据库问题汇总
I sorted out some basic questions about opencv AI kit.
idea自动导包和自动删包设置
设置滚动条默认样式 谷歌浏览器
Solution of DM database unable to open graphical interface
國產全中文-自動化測試軟件Apifox
从数组中找出和为目标的下标
Hcip day 17
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
Pyflink writes MySQL examples with JDBC
農業生態領域智能機器人的應用
国产全中文-自动化测试软件Apifox