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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数论基础_素数相关

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数论基础_素数相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.素數判定

普通的算法即O(sqrt(N))的試除法,高級些的Miller_Rabin素數測試.

但NOIP似乎用不著Miller_Rabin,試除法又非常簡單,就不在這里寫了.

2.求素數

篩法是比較常見的方法.埃拉托色尼斯篩法可以對付一般的題目了.

但我想寫寫線性篩法.

先給code:

const MAX=1000000; var Prime:array[0..MAX] of longint;v:array[0..MAX] of boolean;procedure GetPrime;var i,j,tmp,size:longint;beginsize:=0;fillchar(v,sizeof(v),0);for i:=2 to MAX dobeginif not v[i] thenbegininc(size);prime[size]:=i;end;j:=1;while (j<=size)and(prime[j]*i<MAX) dobeginv[i*prime[j]]:=true;if i mod prime[j]=0 then break;inc(j);end;end;end;beginGetPrime; end.

算法的核心在于while循環內的語句.

首先,prime[j]一定是i的最小質因子,因此也是i*prime[j]的最小質因子.

然后又有了這句話:if i mod prime[j]=0 then break;

于是算法就保證了每個合數只被它的最小質因子篩去,且僅篩去一次.

那么會不會漏掉某些合數沒有篩去呢?不會.

因為i*prime[j'](j'>j)一定被prime[j]乘上以后的某個更大的i'篩去。
∵i'*prime[j]=i*prime[j']
∴i'=i/prime[j]*prime[j']>i

所以是O(N)效率的.

線性篩法的作用不只是求素數,以后還會寫到其他的應用.

轉載于:https://www.cnblogs.com/exponent/archive/2011/08/09/2131869.html

總結

以上是生活随笔為你收集整理的数论基础_素数相关的全部內容,希望文章能夠幫你解決所遇到的問題。

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