二分查找,因数个数最多最大的数

有n个正整数,已知它们按因数个数的多少从小到大排列;在因数个数相同的情况下,两个数按它们的值从小到大排序。现在,我们想找到所有因数个数等于x的数中最大的一个数,该如何解决,使用二分查找的思想

img

既然已经知道排序,那就从中间考试找:
1、首先找到序号为n/2的数,对他进行因数分解,看看其因数数量是否等于x,如果小于或者等于,就确定答案在右边,然后在[n/2,n]区间里边再次使用二分法;如果因数大于x,那么答案就在左边,就在[1,n/2]范围使用二分法继续找。
2、逐渐缩小范围,直到剩下最后一个数,就是你要找的数


def binary_search(l1, item):
    low = 0
    high = len(l1) - 1
    while low <= high:
        mid = int((low + high) / 2)
        guess = l1[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid -1
        else:
            low = mid + 1
    return None


my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, -1))

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^