trang chủ / đề bài / 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ố i và j thỏa mãn 1≤i<j≤n và (j−i+1) là số nguyên tố;
  • Hoán đổi hai phần tử ở vị trí i và j (tức là đổi chỗ a[i] và 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 (0≤k≤5n) 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 (1≤i<j≤n và (j−i+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

  • 1≤n≤105
  • 1≤a[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 3−1+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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0