#P3005. 排列数

排列数

排列数

输入文件:num.in 输出文件:num.out

题目背景

琪露诺今天学习了神秘的排列数。

题目描述

排列数的符号为 A,意为从 n 个物品中任选 m 个,并且按照任意顺序排成一列的方案数。和组合数不同,排列数与选出物品的顺序有关。

以琪露诺的智商当然学不明白排列数的含义,所以她只把公式背了下来:A(n,m) = n! / (n-m)!

幸运的是,期末考试压轴大题刚好考了排列数。题目是这样的:求有多少对 (i, j),满足 i ≤ j,且 A(j,i) = j! / (j-i)! 是 k 的倍数。

可惜只背公式当然是没什么用的,琪露诺完全不会这个题目,你能帮帮她吗?

输入格式

输入仅一行,包含两个整数 n, k,表示排列数的大小限制与倍数限制。

输出格式

输出仅一个整数,表示满足 1 ≤ i ≤ j ≤ nA(j,i) 为 k 的倍数的有序数对 (i, j) 的数量。

输入输出样例

样例 1

输入:

10 1

输出:

55

样例 2

输入:

10 6

输出:

43

样例 3

输入:

100 66

输出:

4540

样例解释

样例 1 中,满足 1 ≤ i ≤ j ≤ 10 的任意 A(j,i) 都是 1 的倍数,共 55 个。

样例 2 中,总共有 55 对满足范围条件,其中不符合倍数条件的有 12 个,符合条件的有 55 - 12 = 43 个。

数据范围

子任务 分数 n k 特殊性质
1 30 ≤ 10 ≤ 100
2 10 ≤ 300 ≤ 10³
3 ≤ 3000
4 ≤ 10⁵ ≤ 2
5 ≤ 100
6 ≤ 10⁶ ≤ 10⁹ 保证 k 为质数
7 20

对于所有数据:1 ≤ n ≤ 10⁶1 ≤ k ≤ 10⁹