素数を…

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
first

素数を…

#1

投稿記事 by first » 14年前

10000の素数を求めるというプログラムでこのようなプログラムを見つけたのですがわからないところがあったので教えていただけませんか?

#include <stdio.h>

int main(void)
{
int i,j,yakusuu;

for(i=1;i<=10000;i++)
{
yakusuu=0;
for(j=1;j<=i;j++)
{
if(i%j==0) yakusuu++;
}

if(yakusuu==2) printf("%d ",i);
}

printf("\n");

return 0;
}
なんですが

for(j=1;j<=i;j++)
{
if(i%j==0) yakusuu++;
}

↑ ↑ ↑ ↑ ↑
上のfor文の意味がわかりません
できるだけくわしく教えていただけないでしょうか
よろしくお願いします

box
記事: 2002
登録日時: 14年前

Re: 素数を…

#2

投稿記事 by box » 14年前

first さんが書きました:10000の素数を求める
10000「まで」の素数、ですね。
first さんが書きました:

コード:

for(j=1;j<=i;j++)
		{
			if(i%j==0) yakusuu++;
		}
変数 i は、素数かどうかを判定したい数が入っています。
変数 j は、i の約数候補です。
i が j で割り切れたら、j が i の約数であることがわかるので、約数の個数(変数 yakusuu)を1増やします。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 素数を…

#3

投稿記事 by みけCAT » 14年前

「1からiまでの整数を一つづつ調べ、
iがその数で割り切れたら(その数がiの約数だったら)変数yakusuuを1増やす」
という意味です。
これによりiの約数の数が数えられます。

※コードはコードタグで囲みましょう
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

first

Re: 素数を…

#4

投稿記事 by first » 14年前

box さんが書きました:
first さんが書きました:10000の素数を求める
10000「まで」の素数、ですね。
first さんが書きました:

コード:

for(j=1;j<=i;j++)
		{
			if(i%j==0) yakusuu++;
		}
変数 i は、素数かどうかを判定したい数が入っています。
変数 j は、i の約数候補です。
i が j で割り切れたら、j が i の約数であることがわかるので、約数の個数(変数 yakusuu)を1増やします。
ありがとうございます

first

Re: 素数を…

#5

投稿記事 by first » 14年前

みけCAT さんが書きました:「1からiまでの整数を一つづつ調べ、
iがその数で割り切れたら(その数がiの約数だったら)変数yakusuuを1増やす」
という意味です。
これによりiの約数の数が数えられます。

※コードはコードタグで囲みましょう
ありがとうございます

non
記事: 1097
登録日時: 14年前

Re: 素数を…

#6

投稿記事 by non » 14年前

解決したのかも知れませんが、途中で素数でないことがわかっても、最後まで割っていくのはあまりにも無駄です。
考え方を変えて、2からi-1まで順に割っていき、割り切れたときには非素数なので、内側のループから抜けるようにしてはどうでしょうか。
non

box
記事: 2002
登録日時: 14年前

Re: 素数を…

#7

投稿記事 by box » 14年前

それを言っちゃうと、「2からi-1まで順に割っていく」という方法もそれなりに非効率ですね。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

non
記事: 1097
登録日時: 14年前

Re: 素数を…

#8

投稿記事 by non » 14年前

box さんが書きました:それを言っちゃうと、「2からi-1まで順に割っていく」という方法もそれなりに非効率ですね。
ルートi まででいいのですが、説明が面倒なので。
もっと良くするなら、求めた素数を配列に格納して、その素数だけで割っていくのでしょうが。
non

閉鎖

“C言語何でも質問掲示板” へ戻る