整体问题:项目欧拉12 - 第一个三角形数值超过500个除数的值是多少?
问题的焦点:除数函数
语言:Python
描述:我使用的函数是粗暴的,程序找到一个除数比x更多的除数所需的时间几乎呈指数增长,每10或20个数字更高.我需要达到500或更多的除数.我已经确定了除数函数正在减少程序.我做的研究让我得到了除数函数,特别是除数函数,它应该是一个函数,它将计算任何整数的所有除数.我看过的每一页似乎都是针对数学专业的,我只有高中数学.虽然我确实遇到过一些提到关于素数和阿特金斯筛选的页面,但是我无法在素数之间建立连接并找到任何整数的所有除数,也没有在网上找到任何关于它的东西.
主要问题:有人可以解释如何编码除数函数甚至提供样本吗?当我用代码查看它们时,数学概念对我来说更有意义.非常感谢.
蛮力除数功能:
def countdiv(a):
count = 0
for i in range(1,(a/2)+1):
if a % i == 0:
count += 1
return count + 1 # +1 to account for number itself as a divisor
Run Code Online (Sandbox Code Playgroud) 我试图获得序列的n个随机和非重叠切片,其中每个子序列的长度为l,最好是它们出现的顺序.
这是我到目前为止的代码,每次尝试使它工作变得越来越混乱,不用说它不起作用.
def rand_parts(seq, n, l):
"""
return n random non-overlapping partitions each of length l.
If n * l > len(seq) raise error.
"""
if n * l > len(seq):
raise Exception('length of seq too short for given n, l arguments')
if not isinstance(seq, list):
seq = list(seq)
gaps = [0] * (n + 1)
for g in xrange(len(seq) - (n * l)):
gaps[random.randint(0, len(gaps) - 1)] += 1
result = []
for i, g in enumerate(gaps):
x = …Run Code Online (Sandbox Code Playgroud)