在维基百科:知识问答/存档/结构式讨论的话题

克勞棣 (留言贡献)

請問有沒有高手能教我如何用Excel判斷一個六位數以下的整數是不是質數?比方輸入353531,則顯示"質數";輸入353532,則什麼都不顯示(因為它不是質數)。謝謝!因為我想找除了12以外,還有哪個整數n使得n±1、n/2 ±1、n/3 ±1都是質數。

彭鹏 (留言贡献)

①在excel内打开Visual Basic for Applications(VBA)界面,新建一个模块,复制下面这段代码:

Function isPrime(num)
    If num <> Int(num) Or num <= 1 Then
        isPrime = "既不是质数也不是合数"
        Exit Function
    End If

    For i = 2 To Sqr(num)
        If num Mod i = 0 Then
            isPrime = "合数"
            Exit Function
        End If
    Next i
    isPrime = "质数"
End Function

②返回excel工作簿界面,在A1单元格输入待判断的数字,B1单元格(或其他任何不是A1的单元格)输入“=isPrime(A1)”即可判断是否是质数。

克勞棣 (留言贡献)

那麼請問我要如何打开Visual Basic for Applications(VBA)界面呢?

另外,返回excel工作簿界面後,我能使用單元格下拉複製嗎?如果能的話,要如何做?因為我是希望輸入某個n值後,Excel直接告訴我n±1、n/2 ±1、n/3 ±1這六個數哪幾個是質數,其中n為等差數列1260、2520、3780、......、540540,共429項這麼多項。謝謝!

彭鹏 (留言贡献)

不同版本的Excel打开方式可能会有些区别。我用的Excel版本(Excel 2016)有个“开发工具”选项卡,点击它之后,再点击下方的“Visual Basic”按钮就可以打开VBA。


这个好做。A1输入1260,A2输入2520,然后选中A1和A2,光标移到A2右下角,按住鼠标不放,往下拖拽到A429后松开鼠标,Excel会自动生成等差数列。

B1输入“=isPrime(A1+1)”,然后选中B1后,光标移到B1右下角,按住鼠标往下拖到B429,Excel会自动套用公式。

C1输入“=isPrime(A1-1)”,然后选中C1后往下拖

D1输入“=isPrime(A1/2+1)”,然后选中D1后往下拖

……

后面依次类推。

您如果实在不知道该怎么做,我可以发一份做好的给你。

克勞棣 (留言贡献)

Excel 2013還真的找不到。請发一份做好的给我。謝謝!

彭鹏 (留言贡献)

方便告诉一下邮箱地址吗?

克勞棣 (留言贡献)

基於資料安全,我不能把我的電郵地址公開給不特定大眾,但您可以在不知道我的電郵地址的前提下,透過系統寄電郵給我。請見WP:EMAIL。謝謝!

不過這好像不能附加檔案。沒關係,我先透過系統email給您,告知我的電郵地址,您再email給我。

彭鹏 (留言贡献)

已发送。

克勞棣 (留言贡献)

已收到,謝謝。我終於證明了540540是第二個使得n±1、n/2 ±1、n/3 ±1都是質數的整數。

Huangsijun17 (留言贡献)

目测要用VBA,自定义一个判断是否是质数的函数。

克勞棣 (留言贡献)

可是我不懂VBA,所以過去我都是用試除法,亦即:

在A2, A3, A4, A5, A6, A7,......依序輸入已確認質數2, 3, 5, 7, 11, 13,.....,在B2輸入=IF(MOD(A$1,A2)=0,A$1/A2,""),然後下拉複製。在A1輸入待查整數,就可以知道它能被那些質數整除。

當然這樣做的缺點是除數會輸入得很辛苦,且只能檢驗比較小的整數(除非很有時間與毅力去輸入一兩千個質數除數),且不能一次檢驗四百多個整數是否質數(除非很有時間與毅力,因為要輸入四百多次)。

Huangsijun17 (留言贡献)

你这是单一一个数字,而且要手动检查。

VBA就是VB的变种,可以自定义出一个Excel的函数,实际上跑的是VBA的代码。在代码里用試除法来排除是不是质数。返回TRUE or FALSE

克勞棣 (留言贡献)

那麼VBA有運算的極限嗎?如果要它判斷267-1是否質數?289-1是否質數?它算得出來嗎?還是只要給它足夠長的時間去跑,就算是200位數它也能判斷?

210.173.1.87 (留言贡献)

如果數字比較大,不建議使用上面這個算法,有效率高很多的算法。

你可否廣泛地說一下你使用的場景有哪些?

另外,我也想問問你的意見,如果有網站列出200位數以內的質數,你認為會有幫助嗎?

克勞棣 (留言贡献)

我使用的場景已經說了:我要證明540540是第二個使得n±1、n/2 ±1、n/3 ±1都是質數的整數n,如果閣下能找出第三個,我會很感謝你。

沒有幫助,如果這個網站有能力列出200位數以內的質數,那還不如像這個網頁一樣,寫一條因數分解程式,只要輸入欲查數字,其因數分解就跑出來,因為極少有人願意先把267-1展開,再去逐個數查表的。這就好像有了小算盤,誰還願意用對數表?一般的對數表也不能告訴你 log 3.884512是多少,而能告訴你的對數表會讓你查到眼睛脫窗.......

Huangsijun17 (留言贡献)

VBA是一种语言啊。。。想干什么当然都可以做到。

至于极限肯定是没有的,但你这对于人(编程人员)和PC都是有极大要求的。

回复“Excel判斷質數”