
No.2ベストアンサー
- 回答日時:
とても大きな数字について、素数であるかどうかを判定するのは、効率のよい方法はなかったと思います。
現在でもときどき、「「2の63乗-1」が素数であることが確認された」
などのような素数に関することがニュースになることがあるぐらいです。
(上の値は適当に書いた値なので、本当に素数かどうかは知りません。)
ある程度小さい数字が素数かどうか判定する場合は、その数の平方根程度までの奇数で割り切れるかどうかを順にすべて調べていくのが単純でいいでしょう。
(ルーチン1)
ある大きさ以下の数が素数であるかどうかを調べ、リストとして出力するのなら、チェックリストを作っておき、ある数の倍数であったら、チェックしていき、最後にチェックされていない数を出力するのがいいでしょう。
(ルーチン2)
上記の実際のコードはたとえば次にようになります。
(別回答とします。)
この回答へのお礼
お礼日時:2002/07/14 18:22
本当に丁寧な回答ありがとうございました!!
C言語はよく知っていますのでかなり参考になりました。
素数というものは難しいものなんですね…。
2つのルーチンしっかり理解します!!
No.5
- 回答日時:
(1)VBには、素数を出す関数はありません。
(2)エラトステネス(注)、「エラトステネスのふるい」でWEB上で検索してください。沢山素数関連の著述が出てきます。
(3)いくつぐらいの素数がいるのですか。1000までの数のうちの素数は下記にのっています。
(3)素数は無限にあります。証明は高校教科書に載っていて、背理法の応用で有名です。
しかしnを指定して、F(n)が必ず素数になる、初等的な関数F()は見つかっていないようです。発見したら
歴史に名が残る?
(4)エラトステネスの篩のアルゴリズムをプログラム化することは難しくないが、数が大きくなると計算時間が無視できなくなります。
(ベンチマークテストにも使われたくらい計算負荷大)
それで充分な数の素数を本で調べ、メモ帳ででも打ちこんで、保存しファイル化し、プログラムの始めにファイルを読んでメモリーに読みこむのがいいのではないでしょうか。
(エラトステネスの篩のプログラム-C言語)
http://www.kashi.info.waseda.ac.jp/~kashi/lec199 …
(エラトステネスの篩のプログラム-旧Basic)
http://www.geocities.com/Tokyo/Flats/9390/basic_ …
(注)1.紀元前3世紀のギリシア人地理学者エラトステネスの地球の大きさに関する著述も出てきますが、それは捨ててください。
2。「SIEVE」はふるいの意味。
No.4
- 回答日時:
回答No.2のルーチン2のコードは以下のようになります。
(VBは知らないのでC(のようなもの)で書かせていただきますが、アルゴリズムは分かると思います。 )
(回答No3.では上記の部分がわけわかんない文章になってしまってます。ごめんなさい。)
void sosuu2(){
MAX=10000;/*MAX未満の素数を調べる。*/
int list[MAX];
/*全ての数は素数の候補*/
for(i=0;i<MAX;i++)list[i]=0;
j=2;/*2の倍数は素数ではない。*/
for(i=j;i<MAX;i+=j)list[i]=1;
/*3以上の奇数の倍数は素数ではない。ただし、チェックしている数j自身は素数かもしれない。*/
for(j=3;j<MAX;j+=2){
for(i=2*j;i<MAX;i+=j) list[i]=1;
}
/*素数の出力:2以上でチェックから漏れているものは素数*/
for(i=2;i<MAX;i++){
if(list[i]==0)printf("%d wa sosuu.\n",i);
}
}
No.3
- 回答日時:
回答No.2のルーチン1のコードは、VBは知らないのでC(のようなもの)で書かせていただきますが、アルゴリズムは分かると思います。
int sosuu(int n){
/*n が素数だったら1を、素数でなかったら、最小の因数を返す*/
/*エラーなら-1を返す。*/
int i, max;
if(n<1) return -1;
if( mod(n,2) == 0) return 2;/*2で割り切れる?*/
max=sqrt(n);
for(i=3;i<=max;i++){
if( mod(n,i) == 0) return i;/*iで割り切れる?*/
}
return 1;
}
No.1
- 回答日時:
候補の数字を一つ用意して、それが素数の定義に当てはまっているか判定すればよいのではないでしょうか?
1からnまでの中で素数はどれか、という場合は1からnまでの数字を総当りする。なんでもいいから、とにかく素数を使いたいなら、乱数で整数を1個発生させて、それが素数か判定し、素数でなかったらもう1個発生させる・・・というふうにやってみては?
何桁の素数を見つけたい・・・っていう条件あります?
この回答へのお礼
お礼日時:2002/07/14 18:19
さっそくの回答ありがとうございました!
何桁の素数を見つけたいというのはないんです…。
とりあえずどんなものでもいいから数多く知りたかったんです。
考え方参考にしたいと思います!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数の値が勝手に変化する原因
-
_dupenv_s関数でメモリリーク
-
ファイルの開き方
-
XnViewにwebpを「いつも開く」...
-
VBAで関数をつくる
-
Excelで4096点以上のFFTの方法
-
あるプログラムのコマンドライ...
-
正しい五十音順について
-
Bluestacks内でダウンロードし...
-
VBAで仕様書は書きますか?
-
☆★大学院入試のアルゴリズムに...
-
.NETプログラムが初回起動が遅い
-
どのプログラミング言語ででき...
-
バッチファイルでウインドウを...
-
C++でアボート(Abort)で処理が...
-
OS入ってる機器のソフト・アプ...
-
モジュラス103の計算とは何でし...
-
画像を読み込むのと取り込むの...
-
PICマイコンのコピー(クローン...
-
良いプログラムとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
COBOLのピリオド
-
C言語 バッファについて。
-
Sublime Text 3でのFortranプロ...
-
360度を超える角度
-
fortran if文
-
VBAで試験項目の条件規格を取り...
-
c言語プログラミング
-
Fortran "実引数の型が仮引数の...
-
Matlabについて質問2
-
Javaの配列プログラムについて
-
N88basicを用いたGPIB制御
-
ruby
-
プログラミング(自由課題)
-
JCLの基本について教えてください
-
main関数終了時のreturnの意味は?
-
プログラミング
-
3つの整数のうち奇数のみを表示...
-
カシオ fx-5800P 測量プログラ...
おすすめ情報