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

Mảng và các phép chia

Đề bài

Mô tả

Cho một mảng gồm n số nguyên dương a1,a2,,anm cặp tốt (i1,j1),(i2,j2),,(im,jm). Mỗi cặp tốt (ik,jk) thoả mãn 1ik<jknik+jk là số lẻ.

Một thao tác gồm các bước sau:

  • Chọn một cặp tốt (ik,jk) và một số nguyên v>1 sao cho v là ước chung của aikajk.
  • Chia cả hai số cho v: gán aikaik/vajkajk/v.

Một cặp tốt có thể được dùng nhiều lần trong các thao tác khác nhau, và các thao tác được thực hiện lần lượt (thao tác sau tác động lên mảng đã bị thay đổi bởi các thao tác trước).

Hãy xác định số thao tác nhiều nhất có thể thực hiện.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nm.
  • Dòng thứ hai chứa n số nguyên a1,a2,,an.
  • m dòng tiếp theo, dòng thứ k chứa hai số nguyên ikjk mô tả một cặp tốt.

Các cặp tốt đôi một phân biệt.

Dữ liệu ra

Một số nguyên duy nhất là số thao tác nhiều nhất có thể thực hiện.

Ràng buộc

  • 2n100
  • 1m100
  • 1ai109
  • 1ik<jknik+jk lẻ

Ví dụ

Input Output Giải thích
3 2
8 3 8
1 2
2 3
0 Cả hai cặp tốt đều liên quan tới a2=3. Ta có gcd(8,3)=1 nên không tồn tại v>1 chia hết cả hai số của bất kỳ cặp nào.
3 2
8 12 8
1 2
2 3
2 Dùng cặp (1,2) với v=2: mảng thành [4,6,8]. Dùng tiếp cặp (2,3) với v=2: mảng thành [4,3,4]. Không thể thực hiện thêm thao tác nào, tổng cộng 2 thao tác.

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