C++で約数の数を数えるプログラムを作っていた時にわからなくなりました。
for文で扱うパラメータをその中のwhile文で扱う時の仕様について教えていただきたいです。
例えば10!が2という素因数をいくつもつか調べるために次のようなプログラムを書きました。
C++
1 int N=10; 2 int cnt=0; 3 int prime=2; 4 5 for(int j=2; j<=N; j++){ 6 while(j%prime==0){ 7 cnt++; 8 j/=prime; 9 } 10 } 11 12 cout << cnt << endl;
しかしこのプログラムは最初のwhile文の中で永遠にループしてしまいます。恐らくfor文のパラメータであるjをwhile文で使っていることにボトルネックがある気がしたので、次のようなコードを書いてみました。
C++
1 int N=10; 2 int cnt=0; 3 int prime=2; 4 5 for(int j=2; j<=N; j++){ 6 int a=j; 7 while(a%prime==0){ 8 cnt++; 9 a/=prime; 10 } 11 } 12 13 cout << cnt << endl;
すると今度は無限ループに入らずにcnt=8を返してくれました。
ちなみにpython3だと最初のコードのような方法で書いても正常に動作します
python
1N=10 2cnt=0 3prime=2 4for i in range(2,N+1): 5 while i%prime == 0: 6 i /= prime 7 cnt += 1 8 9 10print(cnt)
C++のはじめのコードでうまくいかない理由を教えていただけないでしょうか?
また、なぜpythonだと同じように書いてもうまくいくのでしょうか?
よろしくお願いいたします。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/13 06:39
2019/02/13 06:59