日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

SPOJ Python Day2: Prime Generator

發(fā)布時間:2024/9/5 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SPOJ Python Day2: Prime Generator 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2. Prime Generator

任務很簡單,生成m到n之間的所有質數。一個比較常見的思路是:

自然數$1, 2, …, N$中的最大的質因子要小于$\sqrt{N}$。所以用m到n中的每一個數去試除1到$\sqrt{n}$中的所有數。能整除就是合數,全不能整除就是質數。

但是這么做會超時。。

一般生成質數有一個常用的算法:篩法

http://zh.wikipedia.org/wiki/%E5%9F%83%E6%8B%89%E6%89%98%E6%96%AF%E7%89%B9%E5%B0%BC%E7%AD%9B%E6%B3%95 (wiki)的地址

這里邊講的非常好,也給出了偽代碼。

主要是在自然數$[2, \sqrt{n}]$中生成一個邏輯序列,假設default都是True,從2開始把$i$的$i(i, (i+1), (i+2), …, (i+q)…)$全部變成False,然后從下一個TRUE開始循環(huán)。循環(huán)后可以得到所有$[2, \sqrt{n}]$的質數,然后用$[m, n]$里的數去除這些含這些質因子的倍數的數們。。

就是這樣啦~

#!/usr/bin/python # -*- coding: utf-8 -*- import sys import mathdef segment_sieve(a,b):N = int(math.ceil(math.sqrt(b)))is_prime_small = [True for x in range(N)]is_prime = range(a,b)for i in range(2,N):if is_prime_small[i] :for j in range(2*i,N,i):is_prime_small[j] = Falsefor j in range(max(2,(a+i-1)/i)*i, b, i):is_prime[j-a] = 1return filter(lambda x:x>1, is_prime)def main():T = int(sys.stdin.readline())for t in range(T):if t>0 :printn,m = [int(x) for x in sys.stdin.readline().split(' ')]primes = segment_sieve(n,m+1)for i in primes:print iif __name__ == '__main__' :main()

轉載于:https://www.cnblogs.com/xmuer/p/3806905.html

總結

以上是生活随笔為你收集整理的SPOJ Python Day2: Prime Generator的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。