Đường đi trên đồ thị ước

Đề bài

Mô tả

Cho số nguyên dương D. Xây dựng đồ thị vô hướng có trọng số như sau:

  • Mỗi đỉnh là một ước của D (kể cả 1 và chính D).
  • Hai đỉnh x và y (với x>y) được nối bằng một cạnh khi x chia hết cho y và xy là số nguyên tố.
  • Trọng số cạnh nối x và y bằng số ước của x mà không phải ước của y.

Ví dụ, cạnh giữa 4 và 12 có trọng số 3, vì 12 có các ước [1,2,3,4,6,12] còn 4 có các ước [1,2,4], nên có 3 ước của 12 không phải ước của 4 — đó là [3,6,12].

Độ dài của một đường đi giữa hai đỉnh là tổng trọng số các cạnh trên đường đi đó (đường đi có thể đi qua một đỉnh nhiều lần; đường đi rỗng có độ dài 0). Đường đi ngắn nhất giữa hai đỉnh là đường đi có độ dài nhỏ nhất.

Hai đường đi được coi là khác nhau nếu chúng có số cạnh khác nhau, hoặc tồn tại vị trí i sao cho cạnh thứ i của chúng khác nhau.

Có q truy vấn, mỗi truy vấn cho hai đỉnh v và u — hãy đếm số đường đi ngắn nhất giữa v và u. Vì kết quả có thể lớn, in ra theo modulo 998244353.

Dữ liệu vào

  • Dòng đầu chứa số nguyên D (1≤D≤1015).
  • Dòng thứ hai chứa số nguyên q (1≤q≤3·105) — số truy vấn.
  • q dòng tiếp theo, mỗi dòng chứa hai số nguyên v và u (1≤v,u≤D). Bảo đảm D chia hết cho cả v và u.

Dữ liệu ra

In ra q dòng, dòng thứ i là số đường đi ngắn nhất giữa vi và ui, theo modulo 998244353.

Ràng buộc

  • 1≤D≤1015
  • 1≤q≤3·105
  • 1≤v,u≤D và D chia hết cho cả v và u

Ví dụ

Input Output Giải thích
12
3
4 4
12 1
3 4
1
3
1
Truy vấn 1: v=u=4, chỉ có đường đi rỗng độ dài 0. Truy vấn 2: có 3 đường đi độ dài 5 từ 12 về 1: 12→4→2→1, 12→6→2→1, 12→6→3→1. Truy vấn 3: chỉ một đường đi độ dài 3 là 3→1→2→4.
1
1
1 1
1 D=1, đồ thị chỉ có một đỉnh; đường đi rỗng là duy nhất.
18
4
1 18
2 9
6 6
18 1
3
1
1
3
18=2·32. Truy vấn 1→18 có 3!1!·2!=3 thứ tự đi qua các số nguyên tố. Truy vấn 2→9 qua gcd=1 chỉ có một đường.

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