我试图找到一个在O(1)中求和最小的数的因子对。在
解释如下:If number is 100. Then all the possible pairs are :
1 X 100
2 X 50
4 X 25
5 X 20
10 X 10
20 X 5
25 X 4
50 X 2
100 X 1
这里求和最小的一对是10,10,显然是中间的一对
^{pr2}$
这里需要的对是3,4或4,3。在If a number has 'p' pairs then the required one is always ceil(p/2).
如果给定的数字是一个完美的正方形,那么任务就很漂亮了很简单。那个对应该是sqrt(number),sqrt(number).
如果不是,则该对将是ceil(sqrt(number)),number/ceil(sqrt(number))
given that ceil(sqrt(number)) is a factor of number
或该immediate factor neighbour of sqrt(number):
例如考虑“6”。6不是一个完美的正方形。在
sqrt(6)的ceil是3,3是因子6,因此所需的对是3,6/3=2Now consider 102. All pairs are :
1 * 102.0
2 * 51.0
3 * 34.0
6 * 17.0
17 * 6.0
34 * 3.0
51 * 2.0
102 * 1
其中所需的对是17,6或6,17。Here ceil(sqrt(102)) is 11。11的近邻因子是17或6。Now this is what we actually find.
我们如何找到直接因素的邻居?
以下是我的O(n)实现:import math
l = []
n = int(input())
for i in range(1, n + 1):
if n % i is 0:
l.append(i)
middle = l[math.ceil(len(l) / 2)]
print("Required pair is ", middle, ",", n / middle)