No.1
- 回答日時:
候補の数字を一つ用意して、それが素数の定義に当てはまっているか判定すればよいのではないでしょうか?
1からnまでの中で素数はどれか、という場合は1からnまでの数字を総当りする。なんでもいいから、とにかく素数を使いたいなら、乱数で整数を1個発生させて、それが素数か判定し、素数でなかったらもう1個発生させる・・・というふうにやってみては?
何桁の素数を見つけたい・・・っていう条件あります?
さっそくの回答ありがとうございました!
何桁の素数を見つけたいというのはないんです…。
とりあえずどんなものでもいいから数多く知りたかったんです。
考え方参考にしたいと思います!!
No.2ベストアンサー
- 回答日時:
とても大きな数字について、素数であるかどうかを判定するのは、効率のよい方法はなかったと思います。
現在でもときどき、「「2の63乗-1」が素数であることが確認された」
などのような素数に関することがニュースになることがあるぐらいです。
(上の値は適当に書いた値なので、本当に素数かどうかは知りません。)
ある程度小さい数字が素数かどうか判定する場合は、その数の平方根程度までの奇数で割り切れるかどうかを順にすべて調べていくのが単純でいいでしょう。
(ルーチン1)
ある大きさ以下の数が素数であるかどうかを調べ、リストとして出力するのなら、チェックリストを作っておき、ある数の倍数であったら、チェックしていき、最後にチェックされていない数を出力するのがいいでしょう。
(ルーチン2)
上記の実際のコードはたとえば次にようになります。
(別回答とします。)
本当に丁寧な回答ありがとうございました!!
C言語はよく知っていますのでかなり参考になりました。
素数というものは難しいものなんですね…。
2つのルーチンしっかり理解します!!
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.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.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」はふるいの意味。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、写真のプログラムをどう直せ 2 2022/07/09 21:13
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- その他(プログラミング・Web制作) パイソンのプログラミングについての質問です 2 2023/05/22 12:39
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- 数学 整数問題8 素数 14 2023/04/13 10:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
Sublime Text 3でのFortranプロ...
-
ruby
-
プログラミング
-
c言語です
-
c言語のプログラミング 2つの整...
-
main関数終了時のreturnの意味は?
-
変数の値が勝手に変化する原因
-
プログラミング(自由課題)
-
3つの整数のうち奇数のみを表示...
-
Cプログラミング
-
LEDイルミの点滅プログラムを教...
-
インクリメント演算子のみを用...
-
スポーツ施設での出来事で心配...
-
65536は2の何乗なのでしょうか?
-
Vba 実数および実数タイプの変...
-
正しい五十音順について
-
あるプログラムのコマンドライ...
-
PICマイコンのコピー(クローン...
-
volatile修飾について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Sublime Text 3でのFortranプロ...
-
プログラミング
-
fortran if文
-
ruby
-
Fortran90についての質問です。
-
COBOLのピリオド
-
3つの整数のうち奇数のみを表示...
-
main関数終了時のreturnの意味は?
-
c言語のプログラミング 2つの整...
-
360度を超える角度
-
整数格子点を列挙するプログラム
-
N88basicを用いたGPIB制御
-
ProC 固定SQLでNULLってどう表...
-
Fortran "実引数の型が仮引数の...
-
PICのプログラムでsrandを使う...
-
Matlabについて質問2
-
4桁の数値を逆に表示されるプ...
おすすめ情報