[[20051227210154]] 『素数かどうかを判断する数式』(ゆるハムさん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『素数かどうかを判断する数式』(ゆるハムさん)

 今は、以下のようなやり方で判断しています。

 A1 → 判断したい数を入力(例えば10)
 B1から下に、1からA1の数(B10)まで連続した数字を入力
 C1 → =MOD($A$1,B1) としてB列と同じ行数(C10)まで下へコピー
 D1 → =IF(COUNTIF(C:C,0)>2,"合成数","素数")

 しかし、これだと65536までの数字しか判断できません。
 もっと大きな数字でも判断できるようなやり方はないものでしょうか。
 よろしくお願い致します。


 検証できてないので、ご参考までに(あきお)
  D1 → =IF(sosu(A1)=0,"合成数","素数")
 として、標準モジュールに下記のような関数を作ってあげればいいかもしれません
 Function sosu(L As Long)
    Select Case L
    Case 1
        sosu = 0
        Exit Function
    Case 2, 3, 5, 7
        sosu = L
        Exit Function
    End Select

    If (L Mod 2) = 0 Then
        sosu = 0
        Exit Function
    End If

    R = L ^ 0.5
    I = 3
    Do
        sosu = L Mod I
        I = I + 2
    Loop Until sosu = 0 Or sosu > R
 End Function
 追伸:もしも固まったら、[ESC]キーでブレイクしてくださいまし

 あきおさんありがとうございます。そこそこの数だとうまくいきます。
 しかし、A1の値が 10000000000 となると、#NUM! と出ます。
 Long を何に変えたらエクセルで判定可能な一番大きな数まで確認できますでしょうか。(ゆるハムさん)

 Long を Variant に変えてみましたが
 Mod の扱える数が Long みたいでだめでした(あきお)
 # Mod 自作がよさげです(割った数から検算して、余りを求めるなど)

 Currencyなどもダメなようですね。いろいろと有難うございました。(ゆるハムさん)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.