数学王国找寻另一半,求一个整数的真因子总和,算法优化 解决方案超时问题。
(本笔记适合python字符串、列表list熟悉的 coder 翻阅)
【学习的细节是欢悦的历程】
自学并不是什么神秘的东西 ,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。 —— 华罗庚
数学王国找寻另一半
热心肠小南
(求一个整数的真因子总和)
本文质量分:
【 96 】
本文地址:
https://blog.csdn.net/m0_57158496/article/details/133635207
CSDN质量分查询入口:http://www.csdn.net/qc
目 录
◆ 热心肠小南
1、题目描述
题目描述截屏图片
【题目来源于 CSDN 问答社区 提问“数学王国找寻另一半 ” 】
回页目录
2、算法解析
代码的优化,不足以解决超时问题。经过仔细推敲,找到了可以大大减少遍历次数的途径 :从2起,每次遍历到能整除的数,就累加对应的两个因数;如果该整数是某整数数的平方,该某整数即是所有因子的中值(中间值) ,前面是成对累加的因子,遍历到此就找完了整数的因子;值得注意的是,1总是整数数的真因子,没有在遍历中累加,另如果整数有整数平方根,循环遍历多加了一个相同的因子(平方根) 。 所以,在优化算法代码中,return返回语句用了三元操作,分情况返回最后结果,在“特殊”情况(整数n有整数平方根根时) 下要减去中值。
题目样例试炼
2.1 常规全循环遍历算法
代码运行效果截屏图片
常规解析式算法,亦可以写成常规for循环的样子。循环写法,效率比解析式略低,但判别很小,几乎可以忽略。但解析式写法简洁。
代码
def sum_factor ( n) :
return sum ( [ i for i in range ( 1 , n) if not n% i] )
回页目录
2.2 开方遍历到整数平方根优化算法
代码运行效果截屏图片
代码
def sum_factor ( n) :
result = 0
m = int ( sqrt( n) )
for i in range ( 2 , m+ 1 ) :
if not n% i:
print ( i, n// i)
result += i + n// i
return result + 1 if sqrt( n) % 1 else result + 1 - m
回页目录
3、完整源码
(源码较长,点此 跳过源码)
from time import time
from math import sqrt
def sum_factor ( n) :
return sum ( [ i for i in range ( 1 , n) if not n% i] )
def sum_factor ( n) :
result = 0
m = int ( sqrt( n) )
for i in range ( 2 , m+ 1 ) :
if not n% i:
print ( i, n// i)
result += i + n// i
return result + 1 if sqrt( n) % 1 else result + 1 - m
def main ( t, * nums) :
for i in nums:
print ( sum_factor( i) )
if __name__ == '__main__' :
n = input ( '\n输入:\n' ) . strip( )
if not n:
s = '''3
2
10
20'''
print ( s)
n = s[ 0 ]
else :
s = ''
for i in range ( int ( n) ) :
s += '\n' + input ( ) . strip( )
print ( '\n输出:' )
start = time( )
main( int ( n) , * map ( int , s. split( '\n' ) [ 1 : ] ) )
print ( f"\n程序用时: { time( ) - start} s\n" )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
回页首
上一篇: “我写过的最蠢的代码是?”活动征文 (“我写过的最蠢的代码是?”活动征文。老实说,我觉得没写过最蠢的代码!只是幼稚得可爱) 下一篇:
我的HOT 博:
本次共计收集 241 篇博文笔记信息,总阅读量 40.66w,平均阅读量 1687。已生成 16 篇阅读量不小于 4000 的博文笔记索引链接。数据采集于 2023-10-05 22:53:15 完成,用时 4 分 12.96 秒。
ChatGPT国内镜像站初体验:聊天、Python代码生成等 ( 59106 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/129035387 点赞:125 踩 :0 收藏:796 打赏:0 评论:71 本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-07-03 05:50:55 修改。 让QQ群昵称色变的神奇代码 ( 58033 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500 点赞:24 踩 :0 收藏:83 打赏:0 评论:17 本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。 pandas 数据类型之 DataFrame ( 9148 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814 点赞:6 踩 :0 收藏:31 打赏:0 评论:0 本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。 个人信息提取(字符串) ( 7186 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618 点赞:1 踩 :0 收藏:13 打赏:0 评论:0 本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。 罗马数字转换器|罗马数字生成器 ( 7021 阅读) 博文地址: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 修改。 Python字符串居中显示 ( 6915 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023 点赞:1 踩 :0 收藏:7 打赏:0 评论:1 本篇博文笔记 Python列表(list)反序(降序)的7种实现方式 ( 6902 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700 点赞:5 踩 :0 收藏:20 打赏:0 评论:8 本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。 斐波那契数列的递归实现和for实现 ( 5517 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295 点赞:4 踩 :0 收藏:2 打赏:0 评论:8 本篇博文笔记 练习:字符串统计(坑:f‘string‘报错) ( 5094 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096 点赞:0 踩 :0 收藏:1 打赏:0 评论:0 本篇博文笔记于 2021-12-04 22:54:29 发布。 python清屏 ( 5071 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101 点赞:0 踩 :0 收藏:8 打赏:0 评论:0 本篇博文笔记 回车符、换行符和回车换行符 ( 5068 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488 点赞:1 踩 :0 收藏:2 打赏:0 评论:0 本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。 练习:尼姆游戏(聪明版/傻瓜式•人机对战) ( 4932 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399 点赞:14 踩 :0 收藏:42 打赏:0 评论:0 本篇博文笔记 密码强度检测器 ( 4306 阅读) 博文地址: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 修改。 练习:生成100个随机正整数 ( 4255 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220 点赞:1 踩 :0 收藏:6 打赏:0 评论:0 本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。 罗马数字转换器(用罗马数字构造元素的值取模实现) ( 4143 阅读) 博文地址: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 修改。 我的 Python.color() (Python 色彩打印控制) ( 4128 阅读) 博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259 点赞:2 踩 :0 收藏:8 打赏:0 评论:0 本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
推荐条件
阅读量突破三千
(更多热博 ,请点击蓝色文字跳转翻阅)
回页首
精品文章:
来源:老齐教室
回页首
◆ Python 入门指南 【Python 3.6.3】
好文力荐:
CSDN实用技巧博文: