trang chủ / bài tập / primswap

Hoán đổi nguyên tố

Đề bài

Mô tả

Cho một mảng a[1],a[2],,a[n] chứa n số nguyên phân biệt từ 1 đến n (một hoán vị của 1,2,,n).

Bạn cần sắp xếp mảng này theo thứ tự tăng dần bằng cách thực hiện thao tác sau (có thể lặp lại nhiều lần):

  • Chọn hai chỉ số ij thỏa mãn 1i<jn(ji+1)số nguyên tố;
  • Hoán đổi hai phần tử ở vị trí ij (tức là đổi chỗ a[i]a[j]).

Bạn không cần tối thiểu hóa số thao tác. Tuy nhiên, tổng số thao tác sử dụng phải không vượt quá 5n.

Dữ liệu đảm bảo luôn tồn tại lời giải với không quá 5n thao tác.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n.
  • Dòng thứ hai chứa n số nguyên phân biệt a[1],a[2],,a[n].

Dữ liệu ra

  • Dòng đầu in số nguyên k (0k5n) là số thao tác sử dụng.
  • k dòng tiếp theo, mỗi dòng in hai số i j mô tả một thao tác (1i<jn(ji+1) là số nguyên tố).

Nếu có nhiều đáp án, in ra bất kỳ đáp án hợp lệ nào.

Ràng buộc

  • 1n105
  • 1a[i]n, các a[i] đôi một phân biệt.

Ví dụ

Input Output Giải thích
3
3 2 1
1
1 3
Hoán đổi vị trí 1 và 3 (độ dài đoạn 31+1=3 là số nguyên tố), mảng thành 1 2 3.
2
1 2
0 Mảng đã sắp xếp, không cần thao tác nào.
4
4 2 3 1
3
2 4
1 2
2 4
Một chuỗi thao tác hợp lệ đưa mảng về 1 2 3 4. Các đáp án khác cũng được chấp nhận nếu hợp lệ.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0