canuc80k5315·16/50

Hạ Số Bằng Ước

Nộp bài trên LQDOJ

Bài 53 · Sprague Grundy Theorem

Có số nguyên dương . Anna và Bruno luân phiên, Anna đi trước. Trong một lượt, người chơi chọn một chỉ số rồi thay bằng một ước dương nhỏ hơn .

Ví dụ, nếu thì có thể thay nó bằng hoặc , nhưng không thể giữ nguyên . Người không thực hiện được nước đi sẽ thua. Hãy xác định người thắng nếu cả hai đều chơi tối ưu.

Input

  • Dòng đầu chứa số nguyên .
  • Dòng thứ hai chứa số nguyên .

Output

  • In Anna nếu Anna thắng; ngược lại in Bruno.

Constraints

  • ;
  • với mọi .

Scoring

  • Subtask ( số điểm): và .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

6
2 4 6 8 9 12

Output

Anna

Giải thích: Số thừa số nguyên tố tính cả số lần lặp của sáu số lần lượt là ; xor của chúng bằng , nên Anna có chiến lược thắng.

Lời giải tóm tắt
  • Phân tích: Gọi Ω(x) là số thừa số nguyên tố của x, có tính số lần lặp. Mọi ước thực sự d có Ω(d)<Ω(x), và với mọi t từ 0 đến Ω(x)-1 luôn chọn được một ước có Ω=t. Vì vậy g(x)=mex{0,...,Ω(x)-1}=Ω(x). Các số là các trò chơi con độc lập.
  • Thuật toán: Sàng ước nguyên tố nhỏ nhất đến max A_i. Với mỗi số, chia lặp để đếm Ω(A_i) rồi xor các giá trị. In Anna khi xor khác 0.
  • Chứng minh đúng: Lập luận trên chứng minh Grundy của từng số bằng Ω. Định lý Sprague-Grundy cho Grundy toàn vị trí bằng xor các thành phần; vị trí thua đúng khi xor bằng 0.
  • Độ phức tạp: O(M log log M + ΣΩ(A_i)) thời gian và O(M) bộ nhớ, với M=max A_i.