1 #define _for(i,a,b) for(int i = (a);i < b;i ++)
2 #define _rep(i,a,b) for(int i = (a);i > b;i --)
3
4 class Solution
5 {
6 public:
7 bool is_prime(int n)
8 {
9 for(int i = 2; i * i <= n; i ++)
10 if(n%i==0) return false;
11 return n != 1;
12 }
13 long long go(int k)
14 {
15 long long rnt = 1;
16 _for(i,1,k+1)
17 {
18 rnt = i*rnt;
19 rnt %= 1000000007;
20 }
21 return (int)rnt;
22 }
23 int numPrimeArrangements(int n)
24 {
25 int k = 0;
26 _for(i,1,n+1)
27 if(is_prime(i))
28 k ++;
29 return (int)((go(k)*go(n-k))%1000000007);
30 }
31 };