#12238. 排列答案取模

排列答案取模

排列答案取模

题目描述 给定两个整数 n 和 r,计算排列数

P(n,r)=n×(n1)×(n2)××(nr+1)P(n,r) = n \times (n-1) \times (n-2) \times \cdots \times (n-r+1)并输出结果对 109+710^9 + 7 取模后的值。


输入格式

n r

输出格式

P(n,r) mod 1000000007

样例

输入:
1000 500
输出:
<结果>

数据范围

1rn1061 \leq r \leq n \leq 10^6

💡 解法分析

  • 直接按定义计算 P(n,r),每次乘法后取模,避免溢出。
  • 因为只需 r 次乘法,时间复杂度 O(r),足以应付 10610^6 的规模。
  • 由于结果很大,使用 long long 存储中间值。


🔎 代码解析

核心思路P(n,r)=n×(n1)××(nr+1)P(n,r) = n \times (n-1) \times \cdots \times (n-r+1)细节

  • for (i = 0; i < r; i++) 逐项相乘。
  • 每一步取模:ans = (ans * ((n - i) % MOD)) % MOD; 避免大整数溢出,且保证结果在范围内。

复杂度

  • 时间复杂度:O(r)
  • 空间复杂度:O(1)