阶乘求和——求1~202320232023的阶乘总和的末尾九位数字

求 1! + 2! + 3! + … + 202320232023! ,总和的末尾九位数字。


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


1!+ 2! + 3! + ... + 202320232023!
阶 乘 求 和
(求阶乘总和的末尾九位数字)


本文质量分:

90
本文地址: https://blog.csdn.net/m0_57158496/article/details/130472920

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ 阶乘求和
    • 1、题目描述
    • 2、“简单”解题思路
      • 2.1 求阶乘函数
      • 2.2 for 遍历轮询求阶乘序列总和
      • 2.3 截取总和末尾九位数字
    • 3、探究“捷径”
    • 4、算法优化
      • 4.1 总和的末尾九位数字连续十次相同
      • 4.2 n! 的末尾九位数字全为0
    • 5、完整源码


◆ 阶乘求和


1、题目描述


  令 S = 1!+ 2! + 3! + … + 202320232023! ,求 S 的末尾 9 位数字。


  • 提示:答案首位不为 0 。

(问题来源于 CSDN 问答社区提问“问题”)。



回页目录

2、“简单”解题思路


  这题目“超简单”,写一个“求阶乘”的子模块,循环调用子模块求阶乘序列总和就好。

2.1 求阶乘函数

  • Python 代码

def factorail(n):if n in (0, 1):return 1result = 1for i in range(2, n+1):result *= ireturn result
  • 这里就不用“递归算法”求阶乘,改用效率更高的 for 循环。

2.2 for 遍历轮询求阶乘序列总和


start_sec = time()
n = 202320232023result = 0
for i in range(1, n + 1):print(' '*50, end='\r')print(f"{' '*(i%40)}正在计算……", end='\r') result += factorail(i)

2.3 截取总和末尾九位数字


print(f"\n{str(result)[-9:]}\n\n{f' 程序用时 {time() - start_sec:.4f} 秒 ':~^45}\n")
  • 这看似无可挑剔的“算法”,却出不了结果。原因是 1~202320232023 那么大序列的阶乘总和,是一时半会演算不出来的。还有可能发生“内存溢出”的情况。
    (我缘于好奇,让我的前面那段代码在 termux 上跑了几个小时,都还在“演算中……”,只好手动按下 Ctrl + c ,kill 了进程。)


回页目录

3、探究“捷径”


大神解题思路:

  阶乘增加很快,45! 的末九位数就全都为 0 了(当然是 Pythond 打印看到的),因为我们只需要末九位数字,所以后面任意的 + n! 都不会对 1! + 2! + … + 202320232023! 的总和最后九位数字造成影响,枚举到 + 45! 即可。答案为 420940313 。


if __name__ == '__main__':for i in range(1, 4):print(factorail(i))input() 
  • 代码运行输出 1!~45! :

/sdcard/qpython $ python 000.py
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
51090942171709440000
1124000727777607680000
25852016738884976640000
620448401733239439360000
15511210043330985984000000
403291461126605635584000000
10888869450418352160768000000
304888344611713860501504000000
8841761993739701954543616000000
265252859812191058636308480000000
8222838654177922817725562880000000
263130836933693530167218012160000000
8683317618811886495518194401280000000
295232799039604140847618609643520000000
10333147966386144929666651337523200000000
371993326789901217467999448150835200000000
13763753091226345046315979581580902400000000
523022617466601111760007224100074291200000000
20397882081197443358640281739902897356800000000
815915283247897734345611269596115894272000000000
33452526613163807108170062053440751665152000000000
1405006117752879898543142606244511569936384000000000
60415263063373835637355132068513997507264512000000000
2658271574788448768043625811014615890319638528000000000
119622220865480194561963161495657715064383733760000000000

  • 由上面的打印可以看到,45! 的末尾九位数字就开始全 0 了。


start_sec = time()
n = 202320232023result = 0
for i in range(1, 46):print(' '*50, end='\r')print(f"{' '*(i%40)}正在计算……", end='\r') temp = factorail(i)'''if str(temp)[-9:] == '0'*9:break'''result += temp#print(i, str(result)[-9:], factorail(i))if __name__ == '__main__':print(f"\n{str(result)[-9:]}\n\n{f' 程序用时 {time() - start_sec:.4f} 秒 ':~^45}\n")

在这里插入图片描述
  据其上思路,我们就把 for 循环定到 45 就好。但,这是在您熟悉 1~45 阶乘的情况下,要是不明白这“技巧”哩?🤨



回页目录

4、算法优化


4.1 总和的末尾九位数字连续十次相同


  总和后九位数字连续十次不变,说明已经遍历轮询到 n! 后九位数字全部是 0 了,可以退出循环,输出结果。

# 总和后九位数字连续十次不变
start_sec = time()
n = 202320232023result = flag = 0
tail = None
for i in range(1, n + 1):print(' '*50, end='\r')print(f"{' '*(i%40)}正在计算……", end='\r') result += factorail(i)temp = str(result)[-9:]if tail != temp:tail = tempelse:flag += 1if flag > 10:break#print(i, str(result)[-9:], factorail(i))if __name__ == '__main__':print(f"\n{str(result)[-9:]}\n\n{f' 程序用时 {time() - start_sec:.4f} 秒 ':~^45}\n")

4.2 n! 的末尾九位数字全为0


  • 当轮询到 n! 的阶乘结果后面九位数字都是 0 时,对阶乘序列总和的结果末尾九位数字就没有影响了,可以退出循环输出结果。

start_sec = time()
n = 202320232023result = 0
for i in range(1, n + 1):print(' '*50, end='\r')print(f"{' '*(i%40)}正在计算……", end='\r') temp = factorail(i)if str(temp)[-9:] == '0'*9:breakresult += temp#print(i, str(result)[-9:], factorail(i))if __name__ == '__main__':print(f"\n{str(result)[-9:]}\n\n{f' 程序用时 {time() - start_sec:.4f} 秒 ':~^45}\n")

  此题目不是考查我等只晓得哈哈写代码的人,而是要求有很好的洞察力和分析力,可以看透事物本质的能力。实实在在循环202320232023次,是行没通滴。



回页目录

5、完整源码

(源码较长,点此跳过源码)

#!/sur/bin/nve python
# coding: utf-8
from time import timedef factorail(n):if n in (0, 1):return 1result = 1for i in range(2, n+1):result *= ireturn result#if __name__ == '__main__':#for i in range(1, 45):#print(factorail(i))#input() # 总和后九位数字连续十次不变
start_sec = time()
n = 202320232023result = flag = 0
tail = None
for i in range(1, n + 1):print(' '*50, end='\r')print(f"{' '*(i%40)}正在计算……", end='\r') result += factorail(i)temp = str(result)[-9:]if tail != temp:tail = tempelse:flag += 1if flag > 10:break#print(i, str(result)[-9:], factorail(i))if __name__ == '__main__':print(f"\n{str(result)[-9:]}\n\n{f' 程序用时 {time() - start_sec:.4f} 秒 ':~^45}\n")input(flag) # n! 后九位数字全0
start_sec = time()
n = 202320232023result = 0
for i in range(1, n + 1):print(' '*50, end='\r')print(f"{' '*(i%40)}正在计算……", end='\r') temp = factorail(i)if str(temp)[-9:] == '0'*9:breakresult += temp#print(i, str(result)[-9:], factorail(i))if __name__ == '__main__':print(f"\n{str(result)[-9:]}\n\n{f' 程序用时 {time() - start_sec:.4f} 秒 ':~^45}\n")input(000000000) 

回页首

上一篇:  排位赛结果“测谎”(甲乙丙丁说的关于排位赛结果只正确一半,根据甲乙丙丁说的信息求出正确的排位赛结果顺序)
下一篇: 统计字符中字符出现的次数(输入一个字符串,输出字符及相应字符出现的次数)

我的HOT博:

  本次共计收集 209 篇博文笔记信息,总阅读量 32.76w,平均阅读量 1567。已生成 21 篇阅读量不小于 3000 的博文笔记索引链接。数据采集于 2023-05-02 05:31:52 完成,用时 4 分 36.44 秒。


  1. 让QQ群昵称色变的神奇代码
    ( 53588 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    点赞:23   踩 :0  收藏:77  打赏:0  评论:16
    本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。
  2. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    ( 48348 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/129035387
    点赞:123   踩 :0  收藏:786  打赏:0  评论:73
    本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-03-22 00:03:44 修改。
  3. pandas 数据类型之 DataFrame
    ( 8019 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    点赞:6   踩 :0  收藏:24  打赏:0  评论:0
    本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。
  4. 罗马数字转换器|罗马数字生成器
    ( 6389 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。
  5. Python字符串居中显示
    ( 6075 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    点赞:1   踩 :0  收藏:5  打赏:0  评论:1
    本篇博文笔记于 2021-12-26 23:35:29 发布。
  6. 斐波那契数列的递归实现和for实现
    ( 5292 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    点赞:4   踩 :0  收藏:2  打赏:0  评论:8
    本篇博文笔记于 2022-01-06 23:27:40 发布。
  7. 个人信息提取(字符串)
    ( 4958 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    点赞:1   踩 :0  收藏:8  打赏:0  评论:0
    本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。
  8. 练习:字符串统计(坑:f‘string‘报错)
    ( 4865 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    点赞:0   踩 :0  收藏:1  打赏:0  评论:0
    本篇博文笔记于 2021-12-04 22:54:29 发布。
  9. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    ( 4584 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    点赞:14   踩 :0  收藏:42  打赏:0  评论:0
    本篇博文笔记于 2021-11-30 23:43:17 发布。
  10. 回车符、换行符和回车换行符
    ( 4340 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    点赞:0   踩 :0  收藏:2  打赏:0  评论:0
    本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。
  11. python清屏
    ( 4251 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    点赞:0   踩 :0  收藏:5  打赏:0  评论:0
    本篇博文笔记于 2021-10-14 13:47:21 发布。
  12. 密码强度检测器
    ( 3875 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    点赞:1   踩 :0  收藏:4  打赏:0  评论:0
    本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。
  13. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    ( 3805 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。
  14. 练习:生成100个随机正整数
    ( 3573 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    点赞:1   踩 :0  收藏:3  打赏:0  评论:0
    本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。
  15. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
    ( 3529 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124424935
    点赞:1   踩 :0  收藏:2  打赏:0  评论:0
    本篇博文笔记于 2022-04-26 12:46:25 首发,最晚于 2022-04-27 21:22:07 修改。
  16. Python列表(list)反序(降序)的7种实现方式
    ( 3513 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    点赞:4   踩 :0  收藏:11  打赏:0  评论:8
    本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。
  17. 我的 Python.color() (Python 色彩打印控制)
    ( 3353 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    点赞:2   踩 :0  收藏:7  打赏:0  评论:0
    本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
  18. 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。
    ( 3203 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/125415626
    点赞:3   踩 :0  收藏:4  打赏:0  评论:3
    本篇博文笔记于 2022-06-22 19:54:20 首发,最晚于 2022-06-23 22:41:33 修改。
  19. 聊天消息敏感词屏蔽系统(字符串替换 str.replace(str1, *) )
    ( 3065 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/124539589
    点赞:3   踩 :0  收藏:2  打赏:0  评论:3
    本篇博文笔记于 2022-05-02 13:02:39 首发,最晚于 2022-05-21 06:10:42 修改。
  20. Linux 脚本文件第一行的特殊注释符(井号和感叹号组合)的含义
    ( 3031 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/123087606
    点赞:0   踩 :0  收藏:4  打赏:0  评论:3
    本篇博文笔记于 2022-02-23 13:08:07 首发,最晚于 2022-04-04 23:52:38 修改。
  21. 练习:求列表(整数列表)平衡点
    ( 3014 阅读)
    博文地址:https://blog.csdn.net/m0_57158496/article/details/121737612
    点赞:0   踩 :0  收藏:0  打赏:0  评论:0
    本篇博文笔记于 2021-12-05 23:28:10 发布。
推荐条件 阅读量突破三千
(更多热博,请点击蓝色文字跳转翻阅)

回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


回页首

◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/24921.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五分钟写一段Python代码调用ChatGPT服务

ChatGPT是现在很火的AI网站,行业里现在也有很多围绕ChatGPT进行二次开发的AI产品。今天我们来试一试,花5分钟时间,自己写一段代码来调用ChatGPT的服务。希望通过这个小任务,大家会发现ChatGPT和AI离我们并不遥远。 前提&#xff…

教育硬件“老玩家”进入智能手机新赛道,小度胜算几何?

从5月8日有传言称“百度旗下小度将进军智能手机市场”,到5月17日小度官宣将推出旗下新物种产品——小度青禾学习手机,小度在短短10天时间成为市场关注的焦点。 而5月22日,其也拿出了真正的成果,这部专门为青少年打造的学习手机正…

小度即将推出智能手机产品,醉翁之意意在何为?

5月8日,智哪儿从相关渠道获悉,小度即将于5月下旬发布首款智能手机产品。小度科技通过公开渠道确认了上述信息并透露将于下周披露更详细的产品信息。根据市场调查机构Counterpoint Research公布的最新报告,2023年第一季度全球智能手机市场出货…

当 AI 冲击自动化编程,谁将成为受益者?

整理 | 明明如月 责编 | 何苗 出品 | 《开谈》(ID:CSDNnews) 在软件工程中,自动编程一直被视为圣杯。从编译器诞生时代开始,程序自动生成的目标就是将接近自然语言的高级语言翻译成低级语言,最终目标…

纯英文外刊原刊在哪看?怎么看?

.大家都知道,考研英语、雅思、托福、GRE中的文章很多都是来自外刊,它就是一个随机的阅读题库。选择哪些外刊作为备考资料很重要,下面几种外刊可以供大家参考。 时政经济类:经济学人(the Economist)、哈佛商…

有必要看考研英语外刊吗?

外刊是真题的替代品? 在真题数量有限且宝贵的当下,阅读题源外刊已经成为广大考生的不二之选。 但是这是否代表外刊就是真题的替代品呢?答案是否定的。 确定中心 考研是考试,考查方式是考生解题的能力。这就决定了我们在复习过程中…

外刊IT名人/名言

UNIX很简单。但需要有一定天赋的人才能理解这种简单。 –Dennis Ritchie 软件在能够复用前必须先能用。 –Ralph Johnson 优秀的判断力来自经验,但经验来自于错误的判断。 –Fred Brooks ‘理论’是你知道是这样,但它却不好用。‘实践’是它很好用&#…

【外刊】睡眠与减肥

思考 1.睡眠影响饮食习惯的哪些方面? 2.“导致”在英文中可以怎样表达? A fools bolt may sometimes hit the mark : 愚者千虑,必有一得 Can the way you sleep affect your eating habits? 你的睡眠方式会影响饮食习惯吗? 01:00 Mo…

6.22外刊打卡

《赖世雄讲英语》第26期:政治民意调意_品牌英语口语 - 可可英语http://www.kekenet.com/kouyu/201208/195943.shtml 转载于:https://www.cnblogs.com/wanghui626/p/9211747.html

必须关注的考研英语外刊公众号合集(不看后悔)

赶紧来看噢,不看你会后悔的。(哈哈哈) 文章不长,但绝对干货(不信你就往下看) 注意,这里我强烈建议你先点赞收藏,因为这里所推荐的所有资源都是我精心挑选并使用过的,错…

外刊逐句精读|《经济学人》:戒酒、吃素,禁食都有啥讲究?

The art of fasting In a season of abstinence, take a lesson from Ethiopia Short days, long nights, freezing temperatures, Christmas a swiftly fading memory and the prospect of spring remote—“the cruellest month” is not April, as T.S. Eliot wrote, but J…

外刊逐句精读|《金融时报》:亚马逊的官方水军

The perils of using staff as online influencers 正文: Others can learn from Amazon’s failed social media diplomacy Amazon has finally scrapped a campaign /to use paid “fulfilment centre ambassadors”/ to polish its image /on social media an…

外刊/网站公众号以一敌三的英语外刊精读公众号 英语外刊阅读

赶紧来看噢,不看你会后悔的。(哈哈哈) 文章不长,但绝对干货(不信你就往下看) 注意,这里我强烈建议你先点赞收藏,因为这里所推荐的所有资源都是我精心挑选并使用过的,错…

英语外刊精读(Part 1):day1,泛读;day2,精读(上); day3,精读(下);

目录 阅读方法day1day2day3宗旨 day1\2\3笔记单词第一段第二段第三段第四段第五段第六段第七段第八段第九段 句子段落第一段第二段第五段第六段第七段第八段 思考题(待修改)总结文章。。 阅读方法 day1 通读原文,不借工具,遇到不会先跳过。 提取中心句…

外刊精读第01篇 (Economist Jun 4th 2016) Avoiding sunburn

Avoiding sunburn 避免晒伤 Patched up 晒时贴一片 How to avoid solar overexposure, and still get a tan? 怎样在避免晒伤的同时,晒个美美的小麦肤? 1 .SUN cream is a fickle friend. It protects against burn-inducing ultraviolet (UV) li…

英语外刊精读(Part 2):day1,泛读;day2, 精读(上);day3, 精读(下)

目录 阅读方法day1day2day3宗旨 day1/2笔记思考学习安排第一段单词词组、句子 第二段单词词组、句子 第三段单词词组、句子 第四段单词词组、句子 第五段单词词组、句子 第六段单词词组、句子 day1 总结大纲 阅读方法 day1 通读原文,不借工具,遇到不会…

一个时代彻底结束了 ! ! !

最近全球互联网公司不约而同的在裁员,背后表面上看起来是金融危机,更深沉原因是移动互联网的红利彻底结束。 之前我还认为以下四个方向是互联网人的出路:国产软硬件替代、新能源电动车数字化中心、传统企业数化中心、AI/大数据。 同时我还对互…

接口文档设计的12个注意点

前言 大家,我是程序员小灰。 我们做后端开发的,经常需要定义接口文档。 最近在做接口文档评审的时候,发现一个小伙伴定义的出参是个枚举值,但是接口文档没有给出对应具体的枚举值。其实,如何写好接口文档,真的很重要。今天我给你…

实现mini智能助理—模型训练

背景 距离上篇打带你实现自己迷你chatgpt文章,到现在已经过去快两个月。自制mini chatgpt文章一直没有更新,原因有二:1.一直在找合适体量表现不错模型 2.公司内部太卷了,没太多时间好好梳理文章。这篇文章会给大家介绍一些大模型…

Spring Boot 调用外部接口的 3 种方式,还有谁不会?!

点击关注公众号,Java干货及时送达 国内最强微服务框架,没有之一! 几乎覆盖 Spring Boot 所有操作! 2023 全新 Java 面试题(2500+) 1、简介 SpringBoot不仅继承了Spring框架原有的优秀特性&#…