• ベストアンサー

1から入力された数までの素因数を数えるプログラム

こんにちは 1から入力された数(N)までの素因数を数えるプログラムを 作成したいのですが、うまくいきません。 たとえば10と入力すると2と表示されてしまいます。 どこがおかしいのかわかりません。 どなたか教えてください。おねがいします。 N個の配列を用意し、1を入れていき、 素因数でない数の要素には0をいれて、 最終的に1が入っている配列の数を数えて1~Nまでの 素因数の数を数える方法を考えています。 Dim M As Integer Dim N As Integer Dim i As Integer Dim j As Integer Dim sum As Integer Dim L(1000) As Double N = Val(TextBox1) M = N i = 1 Do Until i > N L(i) = 1 i = i + 1 Loop i = 2 Do Until i > M j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop i = i + 1 Loop sum = 0 For i = 2 To N If L(i) = 1 Then sum = sum + 1 End If Next i

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

  • ベストアンサー
  • glin
  • ベストアンサー率100% (2/2)
回答No.3

素因数というのは素数の間違いでしょうか。 もしそうであれば、素数を調べ上げる古典的な方法である「エラトステネスのふるい」のロジックを実践しようとしているように見えますが、 j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop の部分を j = i * 2 Do Until j > M L(j) = 0 j = j + i     ← 1 ではなく i です。 Loop とする必要があります。 「エラトステネスのふるい」については検索エンジンで調べると参考になるページがいろいろ見つかるでしょう。

1724
質問者

お礼

glinさんアドバイスどうもありがとうございます。 お陰様で正常に動きました。

その他の回答 (4)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.5

i = 2 Do Until i > M j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop i = i + 1 Loop ここのループが 問題ですね。 どの ループが どこまで 処理されるかを 明確に しておかないと、思ってもいない 流れになりますよ。

1724
質問者

お礼

takntさん回答ありがとうございます。 確かに思ってもいない流れになりました。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.4

>どこがおかしいのかわかりません。 自分で見つけなければ成長しないよ。 バグの見つけ方が分からない? 一行ずつ実行しながらローカルウィンドウ、ウォッチウインドウで監視するとか。

参考URL:
http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/0001/debug/
1724
質問者

お礼

todo36さん、アドバイスありがとうございます。 これからは参考URLのサイトにかかれていたことを 参考にしていこうと思います。

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.2

あっ失礼。 勘違い。 さっきの無視して

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1

http://oshiete1.goo.ne.jp/kotaeru.php3?q=153758 今まで見た中で、一番まともな約数を見つける方法 このアルゴリズム最強 約数=素数の集合を互いに掛け合わせたもの 履歴から、素数を見つける部分だけ利用をしたらいい

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=153758

関連するQ&A

専門家に質問してみよう