Skip to content

Commit fc9e0f6

Browse files
committed
添加 problem 1175
1 parent c677fc1 commit fc9e0f6

File tree

3 files changed

+109
-0
lines changed

3 files changed

+109
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package leetcode
2+
3+
import "sort"
4+
5+
var primes = []int{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}
6+
7+
func numPrimeArrangements(n int) int {
8+
primeCount := sort.Search(25, func(i int) bool { return primes[i] > n })
9+
return factorial(primeCount) * factorial(n-primeCount) % 1000000007
10+
}
11+
12+
func factorial(n int) int {
13+
if n == 1 || n == 0 {
14+
return 1
15+
}
16+
return n * factorial(n-1) % 1000000007
17+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package leetcode
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
)
7+
8+
type question1175 struct {
9+
para1175
10+
ans1175
11+
}
12+
13+
// para 是参数
14+
// one 代表第一个参数
15+
type para1175 struct {
16+
one int
17+
}
18+
19+
// ans 是答案
20+
// one 代表第一个答案
21+
type ans1175 struct {
22+
one int
23+
}
24+
25+
func Test_Problem1175(t *testing.T) {
26+
27+
qs := []question1175{
28+
29+
question1175{
30+
para1175{5},
31+
ans1175{12},
32+
},
33+
34+
question1175{
35+
para1175{99},
36+
ans1175{75763854},
37+
},
38+
39+
question1175{
40+
para1175{100},
41+
ans1175{682289015},
42+
},
43+
}
44+
45+
fmt.Printf("------------------------Leetcode Problem 1175------------------------\n")
46+
47+
for _, q := range qs {
48+
_, p := q.ans1175, q.para1175
49+
fmt.Printf("【input】:%v 【output】:%v\n", p, numPrimeArrangements(p.one))
50+
}
51+
fmt.Printf("\n\n\n")
52+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# [1175. Prime Arrangements](https://leetcode.com/problems/prime-arrangements/)
2+
3+
4+
## 题目:
5+
6+
Return the number of permutations of 1 to `n` so that prime numbers are at prime indices (1-indexed.)
7+
8+
*(Recall that an integer is prime if and only if it is greater than 1, and cannot be written as a product of two positive integers both smaller than it.)*
9+
10+
Since the answer may be large, return the answer **modulo `10^9 + 7`**.
11+
12+
**Example 1:**
13+
14+
Input: n = 5
15+
Output: 12
16+
Explanation: For example [1,2,5,4,3] is a valid permutation, but [5,2,3,4,1] is not because the prime number 5 is at index 1.
17+
18+
**Example 2:**
19+
20+
Input: n = 100
21+
Output: 682289015
22+
23+
**Constraints:**
24+
25+
- `1 <= n <= 100`
26+
27+
28+
## 题目大意
29+
30+
31+
请你帮忙给从 1 到 n 的数设计排列方案,使得所有的「质数」都应该被放在「质数索引」(索引从 1 开始)上;你需要返回可能的方案总数。让我们一起来回顾一下「质数」:质数一定是大于 1 的,并且不能用两个小于它的正整数的乘积来表示。由于答案可能会很大,所以请你返回答案 模 mod 10^9 + 7 之后的结果即可。
32+
33+
提示:
34+
35+
- 1 <= n <= 100
36+
37+
## 解题思路
38+
39+
- 给出一个数 n,要求在 1-n 这 n 个数中,素数在素数索引下标位置上的全排列个数。
40+
- 由于这一题的 `n` 小于 100,所以可以用打表法。先把小于 100 个素数都打表打出来。然后对小于 n 的素数进行全排列,即 n!,然后再对剩下来的非素数进行全排列,即 (n-c)!。两个的乘积即为最终答案。

0 commit comments

Comments
 (0)