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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 2040:【例5.7】筛选法找质数 (普通筛 线性筛)

發(fā)布時間:2025/3/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 2040:【例5.7】筛选法找质数 (普通筛 线性筛) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 2040:【例5.7】篩選法找質(zhì)數(shù)

【題目考點】

1. 普通篩法找質(zhì)數(shù)(埃拉托色尼篩法)

基本思想:把從2到N的一組正整數(shù)從小到大按順序排列。從中依次刪除2的倍數(shù)、3的倍數(shù)、5的倍數(shù),直到N\sqrt{N}N?的倍數(shù)為止,剩余的即為2~N之間的所有質(zhì)數(shù)。
普通篩法復(fù)雜度為:O(nloglogn)O(nloglogn)O(nloglogn)

為什么直到N\sqrt{N}N?的倍數(shù)為止,以下是證明:

  • 命題:對于整數(shù)n滿足N<n≤N\sqrt{N} < n \le NN?<nN,n是質(zhì)數(shù),或n是合數(shù)時,存在一個整數(shù)a滿足a≤Na \le \sqrt{N}aN?,a是n的因數(shù)。
  • 證明:顯然n可以是質(zhì)數(shù)。如果n是合數(shù),使用反證法。
  • 假設(shè)n是合數(shù)時,n的因數(shù)(除了1)都大于N\sqrt{N}N?。由于n是合數(shù),n至少有兩個不為1或n的因數(shù),設(shè)為a,b,且存在等式a?b?x=na\cdot b\cdot x = na?b?x=n,其中x是某個正整數(shù)。
    a>N,b>N?a?b>N≥na>\sqrt{N}, b>\sqrt{N} \Rightarrow a\cdot b >N\ge na>N?,b>N??a?b>Nn,即a?b>na\cdot b > na?b>n
    根據(jù)a?b?x=na\cdot b\cdot x = na?b?x=n,有a?b≤na\cdot b \le na?bn
    出現(xiàn)矛盾,因而假設(shè)不成立,原命題得證。

2. 線性篩(歐拉篩)

基本思想:讓每個合數(shù)只通過它最小的質(zhì)因數(shù)被篩掉。

例:
8的最小質(zhì)因數(shù)是2,那么讓合數(shù)8通過質(zhì)數(shù)2被篩掉。
15的最小質(zhì)因數(shù)是3,那么讓合數(shù)15通過質(zhì)數(shù)3被篩掉。

普通篩法中,數(shù)字可能會被多次篩掉,線性篩中,每個數(shù)字只被篩掉一次。
線性篩法復(fù)雜度為:O(n)O(n)O(n)
線性篩的字面意思就是該算法的復(fù)雜度為線性的。

例:對于合數(shù)15
在普通篩法中:看質(zhì)數(shù)3的倍數(shù)時,15被篩掉一次,看質(zhì)數(shù)5的倍數(shù)時,15被篩掉一次。
在線性篩中: 15只會通過質(zhì)數(shù)3被篩掉一次。

線性篩法中,維護一個質(zhì)數(shù)數(shù)組prime[]。
算法如下:

  • 每次循環(huán)觀察一個數(shù)字i
  • 如果i是質(zhì)數(shù),加入質(zhì)數(shù)數(shù)組
  • 無論i是不是質(zhì)數(shù),都順序遍歷質(zhì)數(shù)數(shù)組,取到的質(zhì)數(shù)為prime[j]
    • 只要i不是prime[j]的倍數(shù),那么prime[j]就是i*prime[j]的最小質(zhì)因數(shù)。i*prime[j]這個合數(shù)通過prime[j]這個最小質(zhì)因數(shù)被篩掉了。
    • 如果i是prime[j]的倍數(shù),則跳出循環(huán)

原理解釋如下:

  • 由于prime數(shù)組中的質(zhì)數(shù)是遞增的,在遍歷prime數(shù)組的過程中,只要沒有遇到i是prime[j]的倍數(shù)的情況,那么prime[j]一定是i*prime[j]的最小質(zhì)因數(shù)。當(dāng)?shù)谝淮斡龅絠是prime[j]的倍數(shù)的情況時,prime[j]仍然是i*prime[j]的最小質(zhì)因數(shù)。
  • 如果繼續(xù)看prime[j]后面第x個質(zhì)數(shù)(x大于等于1),此時要判斷數(shù)字Y=i*prime[j+x]是否要被篩掉。由于prime[j+x] > prime[j],i已經(jīng)具有更小的質(zhì)因數(shù)prime[j],所以數(shù)字Y的最小質(zhì)因數(shù)是prime[j]而不是prime[j+x],所以Y這個數(shù)不應(yīng)該在i為這個值時被篩掉,它應(yīng)該在i為Y/prime[j]時被篩掉。

例:假設(shè)i是25。25不是2的倍數(shù),那么2是2*25的最小質(zhì)因數(shù),25也不是3的倍數(shù),那么3是3*25的最小質(zhì)因數(shù),25是5的倍數(shù),5仍然是5*25的最小質(zhì)因數(shù)。
25不是7的倍數(shù),7不是7*25的最小質(zhì)因數(shù)了。7*25=175被篩掉的時機是:當(dāng)i循環(huán)到35時,175=35*5,5是175的最小質(zhì)因數(shù),175通過質(zhì)數(shù)5被篩掉。

【題解代碼】

解法1:普通篩法(埃拉托色尼篩法)

#include<bits/stdc++.h> using namespace std; int main() {bool isPrime[1005] = {};//isPrime[i]:i是否是質(zhì)數(shù) int n;cin >> n;for(int i = 2; i <= n; ++i)//初值狀態(tài)下,把每個數(shù)字都標(biāo)記為質(zhì)數(shù) isPrime[i] = true;//isPrime[0],與isPrime[1]都為false,0,1都不是質(zhì)數(shù) for(int i = 2; i <= int(sqrt(n)); ++i){if(isPrime[i]){for(int j = 2*i; j <= n; j += i)//如果一個數(shù)字是某質(zhì)數(shù)的倍數(shù),那么把它標(biāo)記為合數(shù) isPrime[j] = false;}}for(int i = 2; i <= n; ++i){if(isPrime[i])cout << i << endl;}return 0; }

解法2:線性篩(歐拉篩)

#include<bits/stdc++.h> using namespace std; int main() {bool isPrime[1005] = {};//isPrime[i]:i是否是質(zhì)數(shù) int n, prime[1005], psize = 0;//prime:質(zhì)數(shù)數(shù)組 psize:prime數(shù)組長度 cin >> n;for(int i = 2; i <= n; ++i)//初值狀態(tài)下,把每個數(shù)字都標(biāo)記為質(zhì)數(shù) isPrime[i] = true;//isPrime[0],與isPrime[1]都為false,0,1都不是質(zhì)數(shù) for(int i = 2; i <= n; ++i){if(isPrime[i])//如果i是質(zhì)數(shù) prime[++psize] = i;//將i填充到指數(shù)數(shù)組prime for(int j = 1; j <= psize && i*prime[j] <= n; ++j)//遍歷質(zhì)數(shù)數(shù)組 {//篩去當(dāng)前觀察的數(shù)i與某質(zhì)數(shù)prime[j]的乘積isPrime[i*prime[j]] = false;//i*prime[j]這個數(shù)通過prime[j]篩掉 if(i%prime[j] == 0)break;}}for(int i = 2; i <= n; ++i){if(isPrime[i])cout << i << endl;}return 0; }

總結(jié)

以上是生活随笔為你收集整理的信息学奥赛一本通 2040:【例5.7】筛选法找质数 (普通筛 线性筛)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 窝窝午夜精品一区二区 | 手机在线精品视频 | 亚洲精品一区二区潘金莲 | 97香蕉碰碰人妻国产欧美 | 日人视频 | 精品人妻大屁股白浆无码 | 久久久久国产精品熟女影院 | 悠悠色影院 | www天天操 | 亚洲av永久无码精品放毛片 | 欧美一区2区三区4区公司 | 久久高清无码视频 | 亚洲视频一 | 韩国性猛交╳xxx乱大交 | 成人自拍网站 | 亚洲av无码专区在线播放中文 | 精东av在线 | 日本成人在线网站 | 日韩欧美99 | 国产精品毛片久久久久久 | 69毛片| 亚洲国产私拍精品国模在线观看 | 国产69久久精品成人看 | 亚洲一区二区三区蜜桃 | 久久精品视频5 | 国产小视频在线免费观看 | 涩涩的视频在线观看 | 国产一区二区三区中文字幕 | 国产日韩欧美亚洲 | 日韩欧美综合久久 | 少妇姐姐 | 九九在线观看免费高清版 | 69精品无码成人久久久久久 | 澳门黄色网 | 青青草这里只有精品 | 999久久久久 | 亚洲免费在线 | 久久久久99精品成人片毛片 | 免费在线观看高清影视网站 | 精品亚洲中文字幕 | 欧美激情一区二区在线 | 欧美激情自拍偷拍 | 国产成人黄色av | 欧美性生活精品 | 91网站免费看 | 亚洲视频一区二区在线观看 | 欧美激情视频在线观看 | 99色在线观看 | 午夜黄色网址 | 免费黄视频在线观看 | 精品999久久久一级毛片 | 好吊一区二区三区 | 97公开免费视频 | 91禁蘑菇在线看 | 日韩在线视频观看免费 | 波岛野结衣 | 国内成人av | 美日韩丰满少妇在线观看 | 一级片视频在线观看 | 国产高清在线观看视频 | 欧美成人三级在线观看 | 国产精品老熟女视频一区二区 | 偷拍青青草 | 久久艹国产精品 | 欧美日韩国产一级片 | 欧美成人黑人猛交 | 久久精品无码一区二区三区 | av网址免费| av污 | 久射久| 自拍偷拍第2页 | 成人免费视频网 | 亚洲电影一区二区 | 丰满岳乱妇一区二区三区 | 女女百合高h喷汁呻吟玩具 www.亚洲一区 | 黄色va | 日本少妇一级片 | 中文字幕第7页 | 夜色一区 | 中文无码av一区二区三区 | 欧美乱妇一区二区三区 | 韩国中文字幕在线观看 | 青青草社区视频 | 亚洲成年人影院 | 成人毛片视频网站 | 超碰超碰超碰超碰超碰 | 亚洲最大的成人网站 | 草逼网站 | 可以看的黄色网 | 日韩一级久久 | 一区二区三区免费在线观看 | 福利视频h | 91刺激视频| 色综合天天综合网天天狠天天 | 午夜老司机免费视频 | 亚洲成av人片在线观看无 | 蜜臀一区二区三区精品免费视频 | 国产视频一区二区在线播放 | ww久久|