第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何確定數(shù)字是否為正則表達(dá)式的質(zhì)數(shù)?

如何確定數(shù)字是否為正則表達(dá)式的質(zhì)數(shù)?

翻閱古今 2019-11-22 12:51:39
我在RosettaCode上找到了以下Java代碼示例:public static boolean prime(int n) {  return !new String(new char[n]).matches(".?|(..+?)\\1+");}我不是特別了解Java,但除了正則表達(dá)式本身以外,都了解此代碼段的所有方面當(dāng)您在內(nèi)置的PHP函數(shù)中找到它時,我對Regex有基本的基礎(chǔ)知識。.?|(..+?)\\1+素數(shù)如何匹配?
查看完整描述

3 回答

?
鴻蒙傳說

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊

您說您了解這部分,但是為了強調(diào),生成的字符串的長度等于提供的數(shù)字。因此,當(dāng)且僅當(dāng)字符串包含三個字符n == 3。


.?

正則表達(dá)式的第一部分說:“任何字符,零次或一次”。因此,基本上有零個或一個字符-或,按照我上面提到的,n == 0 || n == 1。如果我們有匹配項,則返回該否定項。這與零和一不是質(zhì)數(shù)這一事實相對應(yīng)。


(..+?)\\1+

正則表達(dá)式的第二部分有些麻煩,它依賴于組和反向引用。組是括號內(nèi)的任何內(nèi)容,然后將由正則表達(dá)式引擎捕獲并存儲以供以后使用。反向引用是一個匹配的組,稍后將在同一正則表達(dá)式中使用。


該組捕獲1個字符,然后捕獲1個或更多字符。(+字符表示一個或多個,但僅表示前一個字符或組。因此,這不是“兩個或四個或六個等字符”,而是“兩個或三個等。” +?類似于+,但是它會嘗試匹配盡可能少的字符。+通常會嘗試對整個字符串進(jìn)行吞噬,這在這種情況下很糟糕,因為這會阻止反向引用部分正常工作。)


下一部分是反向引用:同一組字符(兩個或更多)再次出現(xiàn)。所述反向引用出現(xiàn)一次或多次。


所以。捕獲的組對應(yīng)于捕獲的自然字符數(shù)(從2開始)。該組然后出現(xiàn)一些自然的次數(shù)(也從2開始)。如果存在匹配項,則意味著可以找到兩個大于或等于2的數(shù)字的乘積,該兩個數(shù)字與n長度的字符串匹配……意味著您有一個復(fù)合n。再次返回成功匹配的否定:n不是素數(shù)。


如果找不到匹配項,那么您將無法得出兩個大于或等于2的自然數(shù)的乘積...并且您同時具有不匹配項和素數(shù),因此再次返回否定項比賽結(jié)果。


你現(xiàn)在看到了嗎?這真是令人難以置信的棘手(而且計算量很大!),但是一旦獲得它,它同時也很簡單。:-)


如果您還有其他問題,例如正則表達(dá)式解析的實際工作方式,我可以詳細(xì)說明。但是我現(xiàn)在試圖使這個答案簡單(或盡可能簡單)。


查看完整回答
反對 回復(fù) 2019-11-22
?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗 獲得超4個贊

不錯的正則表達(dá)式技巧(盡管效率很低)... :)

正則表達(dá)式對非素數(shù)的定義如下:

當(dāng)且僅當(dāng)N <= 1或N被K> 1整除時,N不是素數(shù)。

與其傳遞N的簡單數(shù)字表示形式到正則表達(dá)式引擎,不如給它提供長度為 N 的序列,該序列由重復(fù)字符組成。析取的第一部分檢查N = 0或N = 1,第二部分使用后向引用尋找除數(shù)K> 1。它迫使正則表達(dá)式引擎找到一些可以重復(fù)至少兩次以形成序列的非空子序列。如果存在這樣的子序列,則意味著其長度除以N,因此N不是素數(shù)。


查看完整回答
反對 回復(fù) 2019-11-22
  • 3 回答
  • 0 關(guān)注
  • 752 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號