trang chủ / bài tập / banner / lời giải

Biểu ngữ lớn

Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Tác giả: huunguyenhuunguyen

Lời giải: Biểu ngữ lớn

Hướng tiếp cận

Không đi qua cọc trung gian tương đương với gcd(|dx|,|dy|)=1 với (dx,dy) là vector hướng. Với mỗi vector (a,b) thỏa gcd(a,b)=1La2+b2H, số đoạn thẳng theo hướng này là (Ma+1)(Nb+1).

Nhận xét quan trọng

  1. Với hướng (a,b)(a,b) (cả hai đều hợp lệ khi b>0), số đoạn thẳng nhân 2.
  2. Để đếm số b trong [bmin,bmax] thỏa gcd(a,b)=1: dùng bao hàm-loại trừ trên các ước nguyên tố của a.
  3. Mỗi số a105 có ít nhất 7 ước nguyên tố phân biệt, nên số subset của primes 27=128.

Thuật toán

Với mỗi a từ 0 đến min(M,H):

  1. Tính khoảng b hợp lệ: bmin=L2a2, bmax=H2a2.
  2. Phân tích thừa số nguyên tố của a.
  3. Dùng bao hàm-loại trừ để tính b[bmin,bmax],gcd(a,b)=1(Nb+1).
  4. Nhân với (Ma+1)×2 (hai chiều).

Độ phức tạp

  • Thời gian: O(M·2ω(a)) trong đó ω(a)7 — thực tế rất nhanh.
  • Bộ nhớ: O(1)

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