【基础入门题018】求阶乘的和

简介: 【基础入门题018】求阶乘的和

【基础入门题】2021.11.14


F(n)=1!+2!+3!+...+n!, 编程求F(50), F(100), F(1000)的值(n! 表示阶乘运算)

编程语言:包括但不限于Python

题目来源:派森特给站每日刷题频道

对于大整数的计算,python比较有优势的,基本没有溢出的烦恼。


方法一:自定义一个阶乘函数:



def fact(n):
  res = 1
  for i in range(1,n+1):
    res *= i
  return res
def F(n):
  res = 0
  for i in range(1,n+1):
    res += fact(i)
  return res
'''
>>> F(50)
31035053229546199656252032972759319953190362094566672920420940313
'''


方法二:lambda表达式: 递归法有递归层数的限制,此表达式最大算到fact(1024)。

 

fact = lambda x:x*fact(x-1) if x else 1
def F(n):
  res = 0
  for i in range(1,n+1):
    res += fact(i)
  return res




方法三:库math的factorial()函数:

def F(n):
  from math import factorial as fact
  res = 0
  for i in range(1,n+1):
    res += fact(i)
  return res



方法四:双循环,阶乘的过程“内置”到内循环中:

def F(n):
  res = 0
  for i in range(1,n+1):
    fact = 1
    for j in range(1,i+1):
      fact *= j
    res += fact
  return res




方法四: 不断提取公因数分解和式

F(n)=1!+2!+3!+4!+...+n!

= 1 + 1*2 + 1*2*3 + 1*2*3*4 + ... + 1*2*3*...*n

= 1 + 2*( 1 + 3*( 1 + 4*( 1 + ... + (n-1)*n))))

def F(n):
  res = 1
  for i in range(n,1,-1):
    res = res*i+1
  return res



方法五: 同上,换正序的range()

def F(n):
  res = 1
  for i in range(n-1):
    res *= n-i
    res += 1
  return res
目录
相关文章
|
2月前
|
人工智能 Scala Kotlin
Kotlin教程笔记(8) - 运算符与中缀表达式
Kotlin教程笔记(8) - 运算符与中缀表达式
|
3月前
|
人工智能 Scala Kotlin
Kotlin教程笔记(8)- 运算符与中缀表达式
Kotlin教程笔记(8)- 运算符与中缀表达式
52 0
|
8月前
|
C语言
数组深入剖析(C语言基础入门)
数组深入剖析(C语言基础入门)
|
8月前
|
机器学习/深度学习
leetcode-172:阶乘后的零
leetcode-172:阶乘后的零
49 0
|
机器学习/深度学习
LeetCode-172 阶乘后的零
LeetCode-172 阶乘后的零
|
Python
【基础入门题043】最大公约数
【基础入门题043】最大公约数
82 0
|
Python
【基础入门题044】最小公倍数
【基础入门题044】最小公倍数
105 0
|
Python
【基础入门题003】分解阶乘的质因数
【基础入门题003】分解阶乘的质因数
79 0
|
Python
【基础入门题026】佩尔数列Pell(n)
【基础入门题026】佩尔数列Pell(n)
124 0
|
Python
【基础入门题045】多个整数的最大公约数
【基础入门题045】多个整数的最大公约数
50 0