CF1558B.Up the Strip

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Note that the memory limit in this problem is lower than in others.

You have a vertical strip with nn cells, numbered consecutively from 11 to nn from top to bottom.

You also have a token that is initially placed in cell nn . You will move the token up until it arrives at cell 11 .

Let the token be in cell x>1x > 1 at some moment. One shift of the token can have either of the following kinds:

  • Subtraction: you choose an integer yy between 11 and x1x-1 , inclusive, and move the token from cell xx to cell xyx - y .
  • Floored division: you choose an integer zz between 22 and xx , inclusive, and move the token from cell xx to cell xz\lfloor \frac{x}{z} \rfloor ( xx divided by zz rounded down).

Find the number of ways to move the token from cell nn to cell 11 using one or more shifts, and print it modulo mm . Note that if there are several ways to move the token from one cell to another in one shift, all these ways are considered distinct (check example explanation for a better understanding).

输入格式

The only line contains two integers nn and mm ( 2n41062 \le n \le 4 \cdot 10^6 ; 108<m<10910^8 < m < 10^9 ; mm is a prime number) — the length of the strip and the modulo.

输出格式

Print the number of ways to move the token from cell nn to cell 11 , modulo mm .

输入输出样例

  • 输入#1

    3 998244353

    输出#1

    5
  • 输入#2

    5 998244353

    输出#2

    25
  • 输入#3

    42 998244353

    输出#3

    793019428
  • 输入#4

    787788 100000007

    输出#4

    94810539

说明/提示

In the first test, there are three ways to move the token from cell 33 to cell 11 in one shift: using subtraction of y=2y = 2 , or using division by z=2z = 2 or z=3z = 3 .

There are also two ways to move the token from cell 33 to cell 11 via cell 22 : first subtract y=1y = 1 , and then either subtract y=1y = 1 again or divide by z=2z = 2 .

Therefore, there are five ways in total.

首页