zoukankan      html  css  js  c++  java
  • Python3求m以内的素数、求m个数中最小的n个数

    [本文出自天外归云的博客园]

    题1:求m以内的素数(m>2)

    def find_all_primes_in(m):
        def prime(num):
            for i in range(2, num):
                if divmod(num, i)[1] == 0:
                    return False
            return True
    
        print([i for i in range(2, m + 1) if prime(i)])
    
    
    if __name__ == '__main__':
        find_all_primes_in(100)

    我还有一种效率不是最高,但是写法最短的一行版求2到100以内的素数的写法:

    print(list(filter(lambda num: False not in set([False if divmod(num, i)[1] == 0 else True for i in range(2, num)]), [i for i in range(2, 101)])))

    这种方法的优点是只有一行,缺点是判断素数的方法不好,把之前所有的数都遍历了一遍并判断是否能够整除,最后才得出是否是素数的结论。正确的方法是遍历之前的数,如果出现了能整除的直接就返回False不再继续判断。 

    题2:求m个数中最小的n个数(m>n)

    def get_max(data):
        max, index = data[0], 0
        for i in range(1, len(data)):
            if data[i] > max:
                max, index = data[i], i
    
        return max, index
    
    
    def get_min(data, n, min=[]):
        for dt in data:
            if len(min) < n:
                min.append(dt)
            else:
                max, index = get_max(min)
                if dt < max:
                    min[index] = dt
    
        print(sorted(min))
    
    
    if __name__ == '__main__':
        data = [2, 55, 41, 2, 56, 89, 85, 45, 15, 3, 6, 4, 89, 75, 21, 10, 20, 31, 226, 10, 225, 456, 895, 42, 14, 547, 61,
                45, 95, 84, 81]
        get_min(data, 5)
  • 相关阅读:
    【模板】辗转相除法
    【模板】冰茶姬(大概是全的?)
    【模板】快速幂
    【模板】线段树-区间修改
    【模板】线段树-单点修改,区间查询
    【模板】dijkstra与floyd
    【模板】SPFA(不完全详解)
    【济南集训】随机分数
    P3205 [HNOI2010]合唱队
    最大子列2
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/9140297.html
Copyright © 2011-2022 走看看