1. 程式人生 > >埃氏篩法求素數-Python

埃氏篩法求素數-Python

def _not_divisible(n): #是否整除
    return lambda x: x%n > 0

def _odd_iter(): #建立奇數序列
    n = 1
    while True:
        n += 2
        yield n

def primes(end_num): #end_num範圍內的素數
    if end_num < 2:
        return
    yield 2
    it = _odd_iter()
    while True:
        n = next(it)
        if n > end_num:
            break
        yield n
        it = filter(_not_divisible(n),it)

PS: lambda 返回函式,:前的x 為引數

每迴圈獲取下個素數,將列表中該素數的所有倍數篩選掉(留下不被該素數的數)

相關推薦

素數-Python

def _not_divisible(n): #是否整除 return lambda x: x%n > 0 def _odd_iter(): #建立奇數序列 n = 1 while True: n += 2 y

關於用篩選素數python程式碼的一些理解

原始碼 來自廖雪峰-filter 演算法描述參考原文。 程式碼塊如下: def _odd_iter(): # 生成一個無限序列的奇數Generator z = 1 while True: z = z+2 yield z def

素數

計算素數的一個方法是埃氏篩法,它的演算法理解起來非常簡單:首先,列出從2開始的所有自然數,構造一個序列:2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...取序列的第一個數2,它一定是素

Java用“素數

用“埃氏篩法”求素數。 先去掉2的倍數,再去掉3的倍數,再去掉4的倍數,……依此類推,最後剩下的就是素數。 要求:使用陣列,使用陣列的長度,使用增強的for語句 import java.uti

用“2~100以內的素數

用“埃氏篩法”求2~100以內的素數。2~100以內的數,先去掉2的倍數,再去掉3的倍數,再去掉5的倍數,……依此類推,最後剩下的就是素數。 請上傳壓縮後的原始碼檔案,程式碼可直接並正確執行; 請注意程式碼風格:類名、變數名的命名,以及必要註釋等等; 以防上傳失敗,請同時把程式碼貼到

用“2~10000以內的素數。2~100以內的數,先去掉2的倍數,再去掉3的倍數,再去掉5的倍數,……依此類推,最後剩下的就是素數

package Homework; public class Test2 {public static void main(String[] args){       int[] a=new int[10000]; for(int i=0;i<a.length;i++){  //初試化陣列,a[0]=2

Python案例:使用計算素數

Python中使用埃氏篩法計算素數(質數) 背景 學習了Python中的filter()函式,對序列中的元素進行篩選。應用於計算素數上。 演算法 埃氏篩法的演算法很簡單: 1. 從2開始造一個自然數序列:2,3,4,5,6,7…… 2. 取第

Eratosthenes“1000以內的素數C++

“埃氏篩法”是一種高效的求N以內素數的演算法,時間複雜度為O(nloglogn),求1000以內素數的“埃氏篩法”程式碼實現如下: #include<cstdio> #include&l

用“2~100以內的素數。2~100以內的數,先去掉2的倍數,再去掉3的倍數,再去掉5的倍數,……依此類推

import java.util.ArrayList; import java.util.List; /** * @author Shicrom * @see 用“埃氏篩法”求2~100以內的素

n以內有多少個素數

cin algorithm memset fin lse mod pre 判斷 end 題目大意:給定整數n,請問n以內有多少個素數 思路:想必要判斷一個數是否是素數,大家都會了,並且可以在O(根號n)的復雜度求出答案,那麽求n以內的素數呢,那樣求就顯得有點復雜了,下面看一

數論_區間內多少素數

埃拉託斯特尼(公元前276—公元前194) 埃拉託斯特尼是古希臘著名的數學家、地理學家、天文學家。他先在亞歷山大港學習,後又轉至雅典。公元前236年,托勒密三世指定他為亞歷山大圖書館的圖書管理員和館長。他跟阿基米德是好朋友。埃拉託斯特尼的主要貢獻包括: 埃拉託斯特尼篩法:尋找素數的方法。 地理常數測量:

素數個數(和尤拉

求1——n的素數的個數,有以下三種方法: 普通的O()演算法: #include<iostream> #include<cstdio> #include<cmath> using namespace std; bool isprim

python實現素數

def iters():#先構造一個從3開始的奇數序列。這是一個生成器,並且是一個無限序列 n=1 while 1: n=n+2 yield n def isinit(n):#篩選函式 return lambda x:x

演算法:拉托色尼篩選素數(Python和Java)

來自百度百科–埃拉托色尼篩選法: (1)先把1刪除(現今數學界1既不是質數也不是合數) (2)讀取佇列中當前最小的數2,然後把2的倍數刪去 (3)讀取佇列中當前最小的數3,然後把3的倍數刪去 (4)讀取佇列中當前最小的數5,然後把5的倍數刪去 (5)讀

素數的快速(模板)

++ clas bool rim 篩法 pan div 記錄 return int prime[maxn];//第i個素數 bool is_prime[maxn];//is_prime[i]為true表示i是素數 int sieve(int n)//返回n以內的素數

JD 題目1040:Prime Number (素數

rime 簡單 set end std tdi href num mod OJ題目:click here~~ 題目分析:輸出第k個素數 貼這麽簡單的題目,目的不清純 用篩法求素數的基本思想是:把從1開始的、某一範圍內的正整數從小到大順序排列

NEFU 2 - 猜想 - [素數]

script 教學 鏈接 ger cst 科學 mat 表示 檢測 題目鏈接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=2 Time Limit:3000ms  Memory Limit:6

POJ 2689 - Prime Distance - [素數]

代碼 one mini rop esc imu script less ogr 題目鏈接:http://poj.org/problem?id=2689 Time Limit: 1000MS Memory Limit: 65536K Description The branc

篩選素數 PAT1013

解決 AR 而不是 != dex PE com 數字 sel 內容摘要: 明確素數到底是啥數。 埃式篩法是幹嘛用的。 利用java實現埃式篩法的思路。 利用埃式篩法解決PAT_1013_B 題。 篩法的改進。 素數(prime number)到底是啥數: 定義:   

== 素數 基本思想 pro 找到 依次 () mes 讀取 埃氏篩法的基本思想: 這個東西的基本思路就是首先把1~n中小於2的數先標記,因為這些數字都不是質數。之後我們依次標記這個裏面所有質數的倍數,直到這個質數的平方要大於n的時候,我們就停止這個程序。這樣我們剩下沒有標