- ベストアンサー
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
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
素因数というのは素数の間違いでしょうか。 もしそうであれば、素数を調べ上げる古典的な方法である「エラトステネスのふるい」のロジックを実践しようとしているように見えますが、 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 とする必要があります。 「エラトステネスのふるい」については検索エンジンで調べると参考になるページがいろいろ見つかるでしょう。
その他の回答 (4)
- taknt
- ベストアンサー率19% (1556/7783)
i = 2 Do Until i > M j = i * 2 Do Until j > M L(j) = 0 j = j + 1 Loop i = i + 1 Loop ここのループが 問題ですね。 どの ループが どこまで 処理されるかを 明確に しておかないと、思ってもいない 流れになりますよ。
お礼
takntさん回答ありがとうございます。 確かに思ってもいない流れになりました。
- todo36
- ベストアンサー率58% (728/1234)
>どこがおかしいのかわかりません。 自分で見つけなければ成長しないよ。 バグの見つけ方が分からない? 一行ずつ実行しながらローカルウィンドウ、ウォッチウインドウで監視するとか。
お礼
todo36さん、アドバイスありがとうございます。 これからは参考URLのサイトにかかれていたことを 参考にしていこうと思います。
- 2ch
- ベストアンサー率51% (64/125)
あっ失礼。 勘違い。 さっきの無視して
- 2ch
- ベストアンサー率51% (64/125)
http://oshiete1.goo.ne.jp/kotaeru.php3?q=153758 今まで見た中で、一番まともな約数を見つける方法 このアルゴリズム最強 約数=素数の集合を互いに掛け合わせたもの 履歴から、素数を見つける部分だけ利用をしたらいい
お礼
glinさんアドバイスどうもありがとうございます。 お陰様で正常に動きました。