ZUFEOJ
Home
ProblemSet
Source/Category
Contest
Status
Ranklist
F.A.Qs
Login
Register
5637: 主要掉期
内存限制:256 MB
时间限制:2 S
题面:传统
评测方式:文本比较
上传者:
提交:2
通过:1
提交
提交记录
统计
Web Board
题目描述
你有一个数组 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
分类标签
432C
1800
greedy,
sortings