Mảng và phép chia

Đề bài

Mô tả

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

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

  • Chọn một cặp tốt (ik,jk) và một số nguyên v>1 sao cho v chia hết cả aik và ajk.
  • Chia cả hai giá trị cho v: aik←aik/v và ajk←ajk/v.

Hãy xác định số thao tác lớn nhất có thể thực hiện liên tiếp trên mảng. Một cặp có thể được dùng trong nhiều thao tác.

Dữ liệu vào

  • Dòng đầu chứa hai số n và m (2≤n≤100, 1≤m≤100).
  • Dòng thứ hai chứa n số a1,a2,…,an (1≤ai≤109).
  • m dòng tiếp theo, mỗi dòng chứa hai số ik,jk mô tả một cặp tốt. Đảm bảo ik+jk lẻ, 1≤ik<jk≤n và các cặp đôi một khác nhau.

Dữ liệu ra

In ra một số nguyên duy nhất — số thao tác lớn nhất có thể thực hiện.

Ràng buộc

  • 2≤n≤100
  • 1≤m≤100
  • 1≤ai≤109
  • ik+jk là số lẻ và 1≤ik<jk≤n.

Ví dụ

Input Output Giải thích
3 2
8 12 8
1 2
2 3
2 Lần 1: dùng cặp (1,2) với v=4, mảng thành [2,3,8]. Lần 2: dùng cặp (2,3) với v=... không được vì gcd(3,8)=1. Quay lại: lần 1 cặp (1,2) v=2 → [4,6,8]; lần 2 cặp (2,3) v=2 → [4,3,4]. Tổng 2 thao tác.
3 2
8 3 8
1 2
2 3
0 Vì gcd(8,3)=gcd(3,8)=1 nên không thể chọn được v>1 ở bất kỳ cặp nào.

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