dポイントプレゼントキャンペーン実施中!

こんにちは
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

A 回答 (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

とする必要があります。
「エラトステネスのふるい」については検索エンジンで調べると参考になるページがいろいろ見つかるでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/18 19:13

i = 2


Do Until i > M
j = i * 2
Do Until j > M
L(j) = 0
j = j + 1
Loop
i = i + 1
Loop

ここのループが 問題ですね。
どの ループが どこまで 処理されるかを 明確に
しておかないと、思ってもいない 流れになりますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/18 19:20

>どこがおかしいのかわかりません。


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

参考URL:http://www.int21.co.jp/pcdn/vb/noriolib/vbmag/00 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/18 19:20

あっ失礼。


勘違い。

さっきの無視して
    • good
    • 0

http://oshiete1.goo.ne.jp/kotaeru.php3?q=153758
今まで見た中で、一番まともな約数を見つける方法

このアルゴリズム最強

約数=素数の集合を互いに掛け合わせたもの

履歴から、素数を見つける部分だけ利用をしたらいい

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!