Question:codility Lesson11 CountNonDivisible
def solution(A):
maxA = max(A)
lenA = len(A)
cnt = {}
for ele in A:
if ele not in cnt:
cnt[ele] = 1
else:
cnt[ele] += 1
divisors = {}
for ele in A:
divisors[ele] = set([1,ele])
div = 2
while div * div <= maxA:
multiple = div
while multiple <= maxA:
if multiple in divisors and not div in divisors[multiple]:
divisors[multiple].add(div)
divisors[multiple].add(multiple // div)
multiple += div
div += 1
#print(divisors)
res = []
for ele in A:
res.append(lenA - sum([cnt.get(div,0) for div in divisors[ele]]))
return res

本文介绍了一种解决Codility课程第11课中“计数非整除元素”问题的方法。通过预先计算所有可能的除数,并使用哈希表记录每个数出现的次数,该算法有效地计算了数组中每个元素的非整除计数。
364

被折叠的 条评论
为什么被折叠?



