- ベストアンサー
VBAでの素数の求め方
VBA初心者です。 素数を求めるプログラムを作らないといけないのですが、やり方が良く分かりません。 modやloopを使って作るのでしょうか。教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 適当にマクロ作ったら 1~100までで26個 1~1000までで169個 1~10000までで1230個 1~30000までで3246個 だけ素数が発見できました。 1~100までは数字を直接見て確認したので。おそらく間違っていないと思います。 for文とint文と四則演算のみで簡単にできますよ。
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
#4 のWendy02 です。 >ただ、Functionというのをまだ知らないのですが、そのFunctionがないと素数の判定は組めないものなのでしょうか。 別にそういうわけではないけれども、構造化したほうが、見やすいからです。 ワン・プロシージシャーに直したいのでしたら、 # flg = PrimeFound(i) の部分に、そのまま当てはめればよいと思います。
お礼
初心者なので、よくわからない単語が並んでいましたが、なんとかできました。 ありがとうございました!
- imogasi
- ベストアンサー率27% (4737/17069)
エラストテネスの篩(ふるい)というアルゴリズムはご存知ですか。 もし知らないのならそちらの勉強が先です。 プログラムは、ますロジックやアルゴリズムありき。 http://etlab.mis.ous.ac.jp/knowledge_e/089/explain3.html
お礼
書き込みありがとうございます。 一応エラストテネスのふるいのやり方は聞きました。 そのやり方が一番適当かなと思い、私はプログラムを組んでいるのですが、なかなか出来ない状態です。^^;
- Wendy02
- ベストアンサー率57% (3570/6232)
VBA/VBをする人間だから、誰でも一度はとおる問題かもしれませんね。 問題の解答を書くべきではないのかもしれませんね。しかし、しょせん、インターネット検索で調べれば、同じですから、不愉快になった方が、おられましたらすみません。 一応、#3のHAL2010 さんの個数と比較してみましたが、同じでした。 Sub test() Dim i As Long, flg As Boolean Dim Numbers As String, cnt As Long For i = 1 To 100 flg = PrimeFound(i) If flg Then Numbers = Numbers & "," & i cnt = cnt + 1 End If Next i MsgBox Mid$(Numbers, 2) & Chr(13) & cnt & "個" 'MsgBox cnt End Sub Function PrimeFound(ByVal n As Long) As Boolean Dim div As Long div = 2 Do While div <= (n / 2) If n Mod div = 0 Then PrimeFound = False Exit Function End If div = div + 1 Loop PrimeFound = True End Function
補足
ソースありがとうございます。 ただ、Functionというのをまだ知らないのですが、そのFunctionがないと素数の判定は組めないものなのでしょうか。
- JeanneNet
- ベストアンサー率48% (100/208)
こんにちは、じゃんぬねっと です。 とりあえず、調べようと思えばいくばくか見付かりますが、いかがでしょう? http://www.google.co.jp/search?biw=826&hl=ja&q=VB+%E7%B4%A0%E6%95%B0&lr=
お礼
ありがとうございます。 私もネット検索をして試行錯誤しているのですが、なかなか上手くいってない状態です・・・・。^^;
- HAL2010
- ベストアンサー率24% (37/150)
学校の課題っぽい匂いがしますのでヒントだけ… 素数とは その数字自身と1以外で割り切れない整数です。 つまり、その数字未満の、1を除くすべての整数で割り切れなければ素数であることが証明できます。 ループの作り方 for a = 1 to 100 next aを1から100まで加算し、処理を行います。 int(a/x) aをxで割った数の整数部分のみを抽出します。
お礼
書き込みありがとうございます。 for文と四則演算までは組めるのですが、int文を良く知らなくて止まってしまいました。^^;テキストにもintの説明はしてないみたいで、あまり使わないもの・・・?なんですかねぇ。
補足
for文、int文、四則演算を使ってなんとかできました。 半分こじつけたようになったかもしれませんが。 ありがとうございました!