3190.Prime Swaps

Time Limit: 1s Memory Limit: 256MB

You have an array a[1],a[2],...,a[n], containing distinct integers from 1 to n. Your task is to sort this array in increasing order with the following operation (you may need to apply it multiple times):
choose two indexes, i and j (1 \le i \lt j \le n; (j-i+1) is a prime number); swap the elements on positions i and j; in other words, you are allowed to apply the following sequence of assignments: tmp=a[i],a[i]=a[j],a[j]=tmp (tmp is a temporary variable).
You do not need to minimize the number of used operations. However, you need to make sure that there are at most 5n operations.

Input Format(From the terminal/stdin)

The first line contains integer n (1 \le n \le 105). The next line contains n distinct integers a[1],a[2],...,a[n] (1 \le a[i] \le n).

Output Format(To the terminal/stdout)

In the first line, print integer k (0 \le k \le 5n) - the number of used operations. Next, print the operations. Each operation must be printed as "i j" (1 \le i \lt j \le n; (j-i+1) is a prime).

If there are multiple answers, you can print any of them.

Sample Input 1

Copy
3
3 2 1
 \n
 · · \n

Sample Output 1

Copy
1
1 3
 \n
 · \n

Sample Input 2

Copy
2
1 2
 \n
 · \n

Sample Output 2

Copy
0
 \n

Sample Input 3

Copy
4
4 2 3 1
 \n
 · · · \n

Sample Output 3

Copy
3
2 4
1 2
2 4
 \n
 · \n
 · \n
 · \n

Submit

请先 登录

© 2025 FAQs