canuc80k7002·3/50

Tổng GCD Của Mọi Dãy

Nộp bài trên LQDOJ

Bài 70 · Möbius Function

Xét mọi dãy có thứ tự độ dài , mỗi phần tử thuộc đoạn từ đến . Tính tổng gcd của các phần tử trên toàn bộ các dãy đó.

Có đúng dãy như vậy. Với mỗi dãy, lấy ước chung lớn nhất của toàn bộ phần tử rồi cộng các giá trị này.

Input

  • Một dòng chứa hai số nguyên và .

Output

  • In tổng cần tìm theo modulo .

Constraints

  • và là số nguyên.

Scoring

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

Example

Test 1

Input

2 3

Output

12

Giải thích: Chín dãy độ dài cho tổng gcd lần lượt là ; tổng bằng . Do đó kết quả của mẫu là .

Lời giải tóm tắt
  • Ý tưởng: Duyệt g từ K xuống 1, lấy (K/g)^N rồi trừ các lớp gcd là bội thực sự của g.
  • Chứng minh đúng: Khi duyệt g giảm dần, (K/g)^N đếm mọi dãy có toàn bộ phần tử chia hết cho g. Trừ các lớp gcd là bội lớn hơn của g để còn đúng số dãy có gcd chính xác g, rồi nhân với g khi cộng đáp án.
  • Độ phức tạp: O(K log K + K log N) thời gian và O(K) bộ nhớ.