python中如何求一个数的因子_python – 获取O(1)中总和最小的数的因子

我试图在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,这显然是中间的

Similarly if number is 12 then pairs are as follows

1 X 12

2 X 6

3 X 4

4 X 3

6 X 2

12 X 1

这里所需的对是3,4或4,3.

If a number has 'p' pairs then the required one is always ceil(p/2).

如果给定的数字是一个完美的正方形,那么任务就很简单了.这对只是sqrt(数字),sqrt(数字).

如果没有,则该对将是ceil(sqrt(number)),number / ceil(sqrt(number))

鉴于ceil(sqrt(number))是一个数字因子

或sqrt(数字)的直接因子邻居:

例如,考虑’6′. 6不是一个完美的广场.

sqrt(6)的ceil是3和3是因子6.因此所需的对是3,6 / 3 = 2

Now 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.这里ceil(sqrt(102))是11. 11的直接因素邻居是17或6.现在这是我们实际找到的.

我们如何找到直接因素邻居?

这是我的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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值