python-算素数

2019-04-27  本文已影响0人  DKider

昨天因为复习的缘故,只写了78个字,导致日更断了一天,还好有复活卡。不过六天只能用一次。

今天本来都打算放弃了,但是又觉得辛辛苦苦坚持的两个月,就这样断掉有点可惜,所以还是开始写了这篇(23:28)。

素数的概念我就不多说了。

对于素数这个问题,有多种考法:

很多,今天就说下如何判断某一范围内的素数有哪些。

第一种也是实现起来最简单的,但是效率最低的:
从头开始遍历,判断每个数是否是素数,如果是则保存。这里还涉及到判断一个数是否是素数,这里就不说了,总之效率很低。

现在将一个高效率的方法:
利用映射,键值对,键是某一个范围内的所有整数,值是布尔值,True为素数,False为合数。

我们先初始化这个字典,将所有的值都设置为False,然后遍历字典,把所有的奇数设置为True,因为偶数中除了2以外,都不可能是素数,所以我们再单独把2的值设为True,然后在从3开始遍历,将所有是当前遍历值得倍数的值都设置为False,遍历完成后字典中所有值为True的键都是素数。

因为用的字典,是一种哈希结构,速度非常快,不过数量也要在计算机的处理能力范围内。

源代码:

class Empty(Exception):
    pass


class CircularQueue:
    class _Node:
        def __init__(self, element, next):
            self._element = element
            self._next = next

    def __init__(self):
        self._tail = None
        self._size = 0

    def __len__(self):
        return self._size

    def is_empty(self):
        return self._size == 0

    def first(self):
        if self.is_empty():
            raise Empty("Queue is Empty!")
        return self._tail._next._elelment

    def enqueue(self, e):
        newest = self._Node(e, None)
        if self.is_empty():
            newest._next = newest
        else:
            newest._next = self._tail._next
        self._tail = newest
        self._size += 1

    def dequeue(self):
        if self.is_empty():
            raise Empty("Queue is Empty!")
        head = self._tail._next
        answer = head._element
        if self._size == 1:
            self.tail = None
        else:
            self._tail._next = head._next
        self._size -= 1
        return answer

    def rotate(self):
        if self._size > 0:
            self._tail = self._tail._next

设置了3000000,总用时大概10s.
emmmmm
我将结果保存在txt中了:


image.png

我忘记换行了,将就看吧!

好的今天就这样,明天就要迎接三门考试了,加油!

上一篇下一篇

猜你喜欢

热点阅读