# Permutation of first N positive integers such that prime numbers are at prime indices

Given an integer **N**, the task is to find the number of permutations of first N positive integers such that prime numbers are at prime indices (for 1-based indexing).

**Note:** Since, the number of ways may be very large, return the answer modulo 10^{9} + 7.

**Examples:**

Input:N = 3

Output:2

Explanation:

Possible permutation of first 3 positive integers, such that prime numbers are at prime indices are: {1, 2, 3}, {1, 3, 2}

Input:N = 5

Output:12

Explanation:

Some of the possible permutation of first 5 positive integers, such that prime numbers are at prime indices are: {1, 2, 3, 4}, {1, 3, 2, 4}, {4, 2, 3, 1}, {4, 3, 2, 1}

**Approach:** There are K number of primes from 1 to N and there is exactly K number of prime indexes from index 1 to N. So the number of permutations for prime numbers is K!. Similarly, the number of permutations for non-prime numbers is (N-K)!. So the total number of permutations is K!*(N-K)!

**For example:**

Given test case: [1,2,3,4,5]. 2, 3 and 5 are fixed on prime index slots, we can only swap them around. There are 3 x 2 x 1 = 3! ways [[2,3,5], [2,5,3], [3,2,5], [3,5,2], [5,2,3], [5,3,2]], For Non-prime numbers - {1,4} [[1,4], [4,1]] So the total is 3!*2!

Below is the implementation of the above approach:

## Python

`# Python implementation to find the ` `# permutation of first N positive ` `# integers such that prime numbers ` `# are at the prime indices ` ` ` `import` `math ` ` ` `# Function to check that ` `# a number is prime or not ` `def` `isPrime(n): ` ` ` `if` `n <` `=` `1` `: ` ` ` `return` `False` ` ` ` ` `# Loop to check that ` ` ` `# number is divisible by any ` ` ` `# other number or not except 1 ` ` ` `for` `i ` `in` `range` `(` `2` `, ` `int` `(n` `*` `*` `0.5` `)` `+` `1` `): ` ` ` `if` `n ` `%` `i ` `=` `=` `0` `: ` ` ` `return` `False` ` ` `else` `: ` ` ` `return` `True` ` ` `# Constant value for modulo ` `CONST ` `=` `int` `(math.` `pow` `(` `10` `, ` `9` `))` `+` `7` ` ` `# Function to find the permutations ` `def` `findPermutations(n): ` ` ` `prime ` `=` `0` ` ` ` ` `# Loop to find the ` ` ` `# number of prime numbers ` ` ` `for` `j ` `in` `range` `(` `1` `, n ` `+` `1` `): ` ` ` `if` `isPrime(j): ` ` ` `prime` `+` `=` `1` ` ` ` ` `# Permutation of N ` ` ` `# positive integers ` ` ` `W ` `=` `math.factorial(prime)` `*` `\ ` ` ` `math.factorial(n` `-` `prime) ` ` ` ` ` `print` `(W ` `%` `CONST) ` ` ` `# Driver Code ` `if` `__name__ ` `=` `=` `"__main__"` `: ` ` ` `n ` `=` `7` ` ` ` ` `# Function Call ` ` ` `findPermutations(n) ` |

*chevron_right*

*filter_none*

**Output:**

144

## Recommended Posts:

- Permutation of first N positive integers such that prime numbers are at prime indices | Set 2
- Absolute difference between the Product of Non-Prime numbers and Prime numbers of an Array
- Check if a number is Prime, Semi-Prime or Composite for very large numbers
- Print the nearest prime number formed by adding prime numbers to N
- Absolute Difference between the Sum of Non-Prime numbers and Prime numbers of an Array
- Absolute difference between the XOR of Non-Prime numbers and Prime numbers of an Array
- Check if a prime number can be expressed as sum of two Prime Numbers
- Print prime numbers with prime sum of digits in an array
- Sum of prime numbers without odd prime digits
- Number of valid indices in the permutation of first N natural numbers
- Print all numbers whose set of prime factors is a subset of the set of the prime factors of X
- Find the prime P using given four integers
- Prime numbers after prime P with sum S
- Find Prime Adam integers in the given range [L, R]
- Print numbers such that no two consecutive numbers are co-prime and every three consecutive numbers are co-prime

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.