如果n的除法器的总和是m
,则两个数字n和m被称为“朋友”
反之亦然。
例如:如果n = 200且m = 284而不是
1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284
1 + 2 + 4 + 71 + 142 = 220。
所以该方法需要得到一个数字K, 该方法应该返回“朋友”对的数量
如果K = 9000,则该方法将返回5,因为有5对是“朋友”:
220284
1184,1210
2620,2924
5020,5564
6232,6368
就大O而言,最有效的运行时间是什么?
答案 0 :(得分:0)
虽然我无法告诉你最佳实现的算法复杂性,但我可以将其分解,至少对于强力方法,如果你实现了一个计数器,那么当你调整因子分解方法时你会知道什么新的 O 值为
第一步:循环数字0(或1)-K这是 O(K)并对其应用第2步和第3步
第二步:获取数字除数的(总和)。如果我们通过循环遍历所有数字来计算除数,则 O(K)。
第三步:计算除数之和(除数之和)是否等于原始数 O(K)。如果是递增计数器。
第四步:输出计数器变量 0(1)时间
因此蛮力方法的整体算法复杂度为 O(K * 2K) = O(K ^ 2)