• ベストアンサー

VBAでの素数の求め方

VBA初心者です。 素数を求めるプログラムを作らないといけないのですが、やり方が良く分かりません。 modやloopを使って作るのでしょうか。教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • HAL2010
  • ベストアンサー率24% (37/150)
回答No.3

#1です。 適当にマクロ作ったら 1~100までで26個 1~1000までで169個 1~10000までで1230個 1~30000までで3246個 だけ素数が発見できました。 1~100までは数字を直接見て確認したので。おそらく間違っていないと思います。 for文とint文と四則演算のみで簡単にできますよ。

lemonail
質問者

お礼

書き込みありがとうございます。 for文と四則演算までは組めるのですが、int文を良く知らなくて止まってしまいました。^^;テキストにもintの説明はしてないみたいで、あまり使わないもの・・・?なんですかねぇ。

lemonail
質問者

補足

for文、int文、四則演算を使ってなんとかできました。 半分こじつけたようになったかもしれませんが。 ありがとうございました!

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

#4 のWendy02 です。 >ただ、Functionというのをまだ知らないのですが、そのFunctionがないと素数の判定は組めないものなのでしょうか。 別にそういうわけではないけれども、構造化したほうが、見やすいからです。 ワン・プロシージシャーに直したいのでしたら、 # flg = PrimeFound(i) の部分に、そのまま当てはめればよいと思います。

lemonail
質問者

お礼

初心者なので、よくわからない単語が並んでいましたが、なんとかできました。 ありがとうございました!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

エラストテネスの篩(ふるい)というアルゴリズムはご存知ですか。 もし知らないのならそちらの勉強が先です。 プログラムは、ますロジックやアルゴリズムありき。 http://etlab.mis.ous.ac.jp/knowledge_e/089/explain3.html

lemonail
質問者

お礼

書き込みありがとうございます。 一応エラストテネスのふるいのやり方は聞きました。 そのやり方が一番適当かなと思い、私はプログラムを組んでいるのですが、なかなか出来ない状態です。^^;

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

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

lemonail
質問者

補足

ソースありがとうございます。 ただ、Functionというのをまだ知らないのですが、そのFunctionがないと素数の判定は組めないものなのでしょうか。

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.2

こんにちは、じゃんぬねっと です。 とりあえず、調べようと思えばいくばくか見付かりますが、いかがでしょう? http://www.google.co.jp/search?biw=826&hl=ja&q=VB+%E7%B4%A0%E6%95%B0&lr=

lemonail
質問者

お礼

ありがとうございます。 私もネット検索をして試行錯誤しているのですが、なかなか上手くいってない状態です・・・・。^^;

  • HAL2010
  • ベストアンサー率24% (37/150)
回答No.1

学校の課題っぽい匂いがしますのでヒントだけ… 素数とは その数字自身と1以外で割り切れない整数です。 つまり、その数字未満の、1を除くすべての整数で割り切れなければ素数であることが証明できます。 ループの作り方 for a = 1 to 100 next aを1から100まで加算し、処理を行います。 int(a/x) aをxで割った数の整数部分のみを抽出します。

関連するQ&A