Ổn định mảng (phiên bản GCD)

Đề bài

Mô tả

Cho mảng số nguyên dương a=[a0,a1,,an1] (với n2).

Trong một bước, mảng a được thay bằng mảng mới b cùng độ dài n, trong đó mỗi phần tử là ước chung lớn nhất (GCD) của hai phần tử kề nhau theo nghĩa vòng tròn:

bi=gcd(ai,a(i+1)modn)

Tức là phần tử kề phải của an1 chính là a0. Sau khi tính xong b, ta gán a:=b.

Ví dụ, nếu a=[16,24,10,5] thì b=[gcd(16,24),gcd(24,10),gcd(10,5),gcd(5,16)]=[8,2,5,1].

Với mảng a cho trước, hãy tìm số bước nhỏ nhất để tất cả phần tử của a trở nên bằng nhau (tức a0=a1==an1). Nếu ngay từ đầu mảng đã có tất cả phần tử bằng nhau thì đáp án là 0.

Dữ liệu vào

  • Dòng đầu chứa số nguyên t (1t104) — số bộ test.
  • Mỗi bộ test gồm hai dòng:
    • Dòng đầu chứa n (2n2·105).
    • Dòng thứ hai chứa n số nguyên a0,a1,,an1 (1ai106).

Tổng giá trị n trên tất cả các bộ test không vượt quá 2·105.

Dữ liệu ra

In ra t số — mỗi dòng là đáp án cho một bộ test theo thứ tự đề bài.

Ví dụ

Input Output Giải thích
5
4
16 24 10 5
4
42 42 42 42
3
4 6 4
5
1 2 3 4 5
6
9 9 27 9 9 63
3
0
2
1
1
Bộ 1: [16,24,10,5][8,2,5,1][2,1,1,1][1,1,1,1] — cần 3 bước. Bộ 2: đã bằng nhau, 0 bước.
1
5
2 2 2 2 2
0 Toàn bộ phần tử đã bằng nhau từ đầu nên cần 0 bướ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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.400 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.2 gforth 0.7.3 gfortran 12.2.0 go 1.27.0 groovyc 5.1.1 javac 25.0.4 node 26.8.1 julia 1.12.7 kotlinc 2.4.10 lean 4.33.1 sbcl 2.2.9 lua 5.4.9 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.10 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.14.7 racket 8.7 ruby 4.0.6 rustc 1.98.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.3.3 tclsh 8.6 bun 1.4.0 deno 2.9.6 v 0.5.2 zig 0.16.0