for文のなかで回される数字に素数で割ることで動作を中断させたい。
for(i = 0; i < ptr; i++){ if(n % prime[i] == 0) break; }
この部分で配列primeのなかにある素数でnの数字を割ることで素数の計算量を減らしたいと考えております。
自分の考えではiが回って、prime[0],[1],[2]と入って行って、割ることができればそこで中断する。ということ思ってこのように書いてみたのですが、どうもうまくいきません。
コンパイルしても「3」しか出てきません。
考え方の示唆やヒントを与えてくださると幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
なし
該当のソースコード
C++
1 2#include <cmath> 3#include <iostream> 4#include <stdio.h> 5 6int main(void) 7{ 8 int i, n; 9 int prime[500]; 10 int ptr = 0; 11 12 prime[ptr++] = 2; 13 prime[ptr++] = 3; 14 15 16 for (n = 3; n <= 1000; n += 2) { 17 for(i = 0; i < ptr; i++){ 18 if(n % prime[i] == 0) 19 break; 20 } 21 22 if (n % i == 0) 23 break; 24 } 25 if (n == i) 26 prime[ptr++] = n; 27 printf("%d\n", n); 28 29 return (0); 30 }
インデントにタブとスペースが混在していますと, 開発環境ではきちんと見えてもこちらではガタガタになります.
インデントをタブもしくはスペースで統一されますと良いかと思います.
>素数の計算量を減らしたい
何がしたいかよく分からないのですが、1000までの素数を求めてるんですか?
>>jimbeさん
すみません。以後気をつけます。
>>cateye
素数を求める過程で、1000までの数字のなかで素数で割ることができればほかの数字で割ることなく、計算量が減らせるということをやりたいのです。
伝わりますでしょうか?
よろしくお願いいたします。
1000まで整数を割ることの出来るの素数であれば31:"sqrt(1000)"まででOKですから、素数表を持ったらどうですしょう?
参考:エラトステネスのふるいとその計算量→https://mathtrain.jp/eratosthenes
2 3 5 7 11 13 17 19 23 29 31
>>cateyeさん
コメントありがとうございます。
参考に頑張ってみます。
ありがとうございます。
回答1件
あなたの回答
tips
プレビュー