📜  计算非弹性数字的Python程序

📅  最后修改于: 2022-05-13 01:54:48.919000             🧑  作者: Mango

计算非弹性数字的Python程序

如果任何数字以这样一种方式表示,当我们从左到右阅读它时,每个第 i数字大于或等于第 i-1数字被称为递增数字。如果任何数字的位数从左到右递减,则称为递减数。

例子:

但是,如果这个数字既不增加也不减少,则称为Bouncy Number

例子:

本文的任务是统计 10 k以下的 Non-Bouncy Numbers 的总数,并在 mod(10 9 +7) 中打印最终计数。为此,我们将使用星条法来计算给定范围内的非弹性数字的数量。

星条法:

星条法是一种用于处理基于组合的问题的技术。当我们想要相同组的数量时,就会出现这类问题。

计算相同组的公式:

count = (N+M-1)/N

其中 N 是相同的对象,M 是容器或范围。

最终公式:
count=\frac{N!}{M!(N-M)!}

例子:

Input : k = 6
Output : 12951
 
Input : k = 9
Output : 140906

下面是实现:

Python3
# import redunce function from functools
from functools import reduce
 
 
# define a function to
# calculate nCr
def nCr(n, k):
 
  # this approach is based on
  # approach of stars and bar method
  # using reduce and lambda function
  # to calculate number & denom
  number = reduce(lambda x, y: x * y,
                 list(range(n, n - k, -1)))   
  denom = reduce(lambda x, y: x * y,
                 list(range(1, k + 1)))       
   
  #  denom root of number will be the final result
  return number // denom       
 
# Driver Code
# input value of k
k = 6 
   
# calculating r using function call
r = int((nCr(k + 10, 10) +
         nCr(k + 9, 9)
         - 2 - 10 * k))
 
# print final result
print(r % (1000000000 + 7))


输出:

12951