5637: 主要掉期

内存限制:256 MB 时间限制:2 S
题面:传统 评测方式:文本比较 上传者:
提交:2 通过:1

题目描述

你有一个数组 a[1], a[2], ..., a[n],包含从 1 到 n 的不同整数。你的任务是通过以下操作对数组进行升序排序(你可能需要多次应用该操作):
选择两个索引 i 和 j(1 ≤ i < j ≤ n;(j - i + 1) 是一个质数);交换位置 i 和 j 上的元素。换句话说,你可以应用以下的赋值序列:tmp = a[i],a[i] = a[j],a[j] = tmp(tmp 是一个临时变量)。
你不需要最小化所使用的操作数量。然而,你需要确保总操作次数最多为 5n。

输入格式

第一行包含整数 n(1 ≤ n ≤ 10^5)。接下来的行包含 n 个不同的整数 a[1], a[2], ..., a[n](1 ≤ a[i] ≤ n)。

输出格式

在第一行中,打印整数 k(0 ≤ k ≤ 5n)——表示使用的操作数量。接下来,打印这些操作。每个操作必须打印为“i j”(1 ≤ i < j ≤ n;(j - i + 1) 是一个质数)。
如果有多个答案,你可以打印其中的任何一个。

输入样例 复制

4
4 2 3 1

输出样例 复制

3
2 4
1 2
2 4