#L0355. 寄存器

寄存器

题目背景

在死磕计算机系统底层机制的过程中,小符同学对汇编语言的运行产生了浓厚兴趣。他设计了一个简单的虚拟机,但由于指令解析器的缺陷,他需要暴力试探寄存器的初始状态,来让一段特定的校验码通过。

题目描述

该虚拟机有三个核心寄存器:RAX, RBX, RCX。 已知这三个寄存器在初始化时,必定分别被赋予了 11MM 之间的一个正整数(三个寄存器的值可以相同)。

虚拟机在启动时会执行一段校验公式,计算结果 VV 的规则如下: V=(RAX×RBX)+RCXV = (RAX \times RBX) + RCX

现在给定目标校验结果 TT 以及寄存器的取值上限 MM,请你计算出有多少种不同的寄存器初始赋值方案,能够使虚拟机的计算结果恰好等于 TT

输入格式

一行,包含两个用空格分隔的正整数 TTMM,分别表示目标校验结果和寄存器取值上限。

输出格式

一个整数,表示满足 (RAX×RBX)+RCX=T(RAX \times RBX) + RCX = T 的方案总数。

数据范围

对于 100% 的数据: 1M5001 \le M \le 500 1T1051 \le T \le 10^5

样例

10 5
7

样例解释

M=5M = 5,说明寄存器的值只能在 1155 之间。目标 T=10T = 10。枚举可得以下 7 种方案满足 (RAX×RBX)+RCX=10(RAX \times RBX) + RCX = 10: RAX=1, RBX=5, RCX=5 (1×5+5=101 \times 5 + 5 = 10) RAX=2, RBX=3, RCX=4 (2×3+4=102 \times 3 + 4 = 10) RAX=2, RBX=4, RCX=2 (2×4+2=102 \times 4 + 2 = 10) RAX=3, RBX=2, RCX=4 (3×2+4=103 \times 2 + 4 = 10) RAX=3, RBX=3, RCX=1 (3×3+1=103 \times 3 + 1 = 10) RAX=4, RBX=2, RCX=2 (4×2+2=104 \times 2 + 2 = 10) RAX=5, RBX=1, RCX=5 (5×1+5=105 \times 1 + 5 = 10)