式が出来てしまうと、プログラムは簡単です。
出力結果2022-10-24
円周率を求める(その1)
円周率は、円の直径からその円の円周の長さを
求める時に、小学校の時からお世話になった係数
です。
しかし、その円周率はどうやって求められてい
たのか普通の人は知りません。ドラム缶のような
円柱の円周を巻き尺で測って、直径で割れば出て
きますが、巻き尺の目盛は良くてmm単位ですし
測定誤差もあります。
ここで論理的な方法を考えてみますと、先ずは
三平方の定理を使う方法が有るようです。
※直角三角形の三辺abcには
a^2+b^2=c^2
解き方
2022-10-18
素因数分解(その2)
Javaを意識しながら、試行錯誤して次のような
フローチャートとプログラムを考えました。
(2~n1)で割っていって割り切れる数字と割った
回数を拾い出すやり方です。iは小さい数字から使
いますので、結果的に素数で割った形になります。
計算結果の一部を示すと、
となりました。
素因数分解(その1)
素数以外の自然数は素数の掛け算で表現できま
すが、これが素因数分解です。
自然数2からN迄の数字を素因数分解するプロ
グラムを増した考えて見ました。
ざっと、フローチャートを作りました。
多分目的を達成します。goto文が好きなプログラム
の行に飛びますから、矢印どうりに処理を進めてく
れるはずです。
でもjava等のプログラム言語にはこの様な命令文
はなさそうです。
そこで、このフローチャートをベースにjavaで使
えるフローチャートを考えなければなりません。
※他のレベルの高い人はどう書くか知りませんが、
私の場合はこの手順で考えます。
2022-10-14
素数を求める(その5)
今までに改良してきたプログラムは、素数か
どうか調べたい数字nをそれより小さい数字iで
割ってみて余りがあるかどうかで判定している
が、全てのiで割った後、1個以上割れる数字が
有った時に素数と判断している。
今回はiで割る時割り切れる数字が1個見つ
かったら、すぐに次のnを調べるようにする。
こうすれば、素数でないと分かった後の無駄
な計算をする事を省ける。
その方法は、図のようにbreak;を入れるだけで済む。
これにより、2秒かかった計算が0.5秒に
なった。「素数を求める(No.1)」のプログ
ラムからの改善の結果、
N=100,000の時
素数の数:9,592個
処理時間:14,119 ms
処理回数:4,999,850,001回
であったのが、今回の改善「素数を求める(その5)」
のプログラムでは、
N=100,000の時
素数の数:9,592個
処理時間:518 ms
処理回数: 113,970,448回
N=1,000,000の時
素数の数:78,498個
処理時間:36,915 ms
処理回数: 9,395,812,778回
にする事が出来た。
因みに、「素数を求める(No.1)」のプログラム
に、break;を入れた場合は
N=100,000の時
素数の数:9,592個
処理時間:1051 ms
処理回数:227,995,678回
N=1,000,000の時
素数の数:78,498個
処理時間:77,986 ms
処理回数:18,792,164,730回
であった。
尚、「素数を求める(No.1)」のプログラム
に、break;を入れなかった場合には
N=1,000,000の時
素数の数:78,498個
処理時間:708,240 ms (約12分)
処理回数:249,999,000,001回
素数を求める(その4)
「素数を求める(その3)」から更に改良します。
素数は2から始まりますが、それ以降は全て奇数の
はずです。そこで、プログラム上で調査する数値を
奇数だけにします。
計算時間で2秒、処理回数及び処理時間が約1/4になりました。プログラムミング初期
と比べると、1/7です。
2022-10-12
素数を求める(その2)
さて、「素数を求める(その1)」で、N=100
とし、100迄の素数を求めました。その時25個の
素数があったわけですが、Nをより大きな数字にし
たらどうなるか?を考えてみました。
N= 10,000の時
素数の数:1,229個
処理時間: 164 ms
処理回数: 49,985,001回
N= 20,000の時
素数の数:2,262個
処理時間: 617 ms
処理回数: 199,970,001回
N= 50,000の時
素数の数:5,133個
処理時間: 3,468 ms
処理回数:1,249,925,001回
N=100,000
素数の数:9,592個
処理時間:14,119 ms
処理回数:4,999,850,001回
と言うようにNが10万程度でも素数はちゃんと
拾いだせるのですが、計算ループ部分の処理回数
が50億回位になって、処理時間は14秒以上も掛
かってきます。
そこで、もっと短い時間で処理できるように
プログラムの改善を考えてみます。
nと言う数字が素数か調べるためにn-1迄の
数字で割っていますが、nはn/2以上の数字で
割っても、2以下にしかなりませんので、
n-1迄の数字ではなく、n/2迄の数字で割れば
十分です。
但し、n-1⇒n/2ではプログラム上nを整数
であるintと定義しているので、例えば3/2=1.5
でなく1、5/2=2.5でなく2となるので、念の為
にn-1⇒n/2+1としてみます。
2022-10-11
2022-10-09
eclipse操作(No.6)
プログラミングのために、eclipses操作 No4に
戻ります。
立上げ時の画面は「ワークベンチ」と呼ばれま
すが、その中にいくつかの作業スペースが並んで
います。
・エディター
プログラムを書き込む領域
・パッケージエクスプローラ
ワークスペースにあるプログラムのツリー
・コンソール
プログラム実行結果等が表示されます
ング作業をするのかと言うと、
1)エディター内の
package pakkeeji01;
public class Kurasu01 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
*************
}
}
***********の行に実行する内容を書き込む
2)今回は、もっとも簡単な実行文として
System.out.println("じゃ~ばじゃば");
と入れて見る。
3)これで、「じゃ~ばじゃば」とeclipse上で プリントアウトするプログラムが完成した
4)次に、このプログラムを実行してみる
下の絵の①→②の順にクリックする
※もしくは、直接○の三角マークをクリックする
5)すると、下のように命令が実行された事が解る流れと、作業方法になる。
最後に、javaプログラミング言語について、
簡単な説明をする。
2022-10-04
eclipse操作(No.5)
さて、前回迄でプログラミングできる直前まで
到達できたのですが、私の場合は年齢的に小さな
文字が見え難いので、テキストの文字サイズを大
きくしたいと思います。別に小さくても良いと思
う人は、処理する必要は有りません。
1)以下の絵のように操作するとテキストサイズの
変更設定画面に到達します。
①から順に選択してください。
2)次にフォントサイズの変更です。
今回はサイズ10を12にしてみます。
⑥から順に選んで下さい。すると、破線の丸枠で囲んでいる
ように、文字が大きくなります。
必要は有りません。
2022-10-01
eclipse操作(No.4)
次にクラスを作成し、プログラム作成の直前まで
の準備をします。
1)先ず、前回(プロジェクト作成)迄の画面です。
このようになっていると思います。2)ではクラスを作成します。
プログラム作成と同じように、左上の「ファイル」
をクリックし、「新規」→「クラス」と順に選びます。
3)すると、クラス作成のための表が出てきますので、 クラス名を「Kurasu01」と仮に設定しました。
勿論好きな名前(分類しやすい名前)でいいです。
この時、
Public static void main(String[]args)
の前の□にチェックを入れて下さい。後が少し
楽になります。
最後に「完了」をクリックします。
4)ここまでやると、次のような画面になっています。
これで、プログラム作成の準備が全て終わりました。 javaでは
package pakkeeji01;
public class Kurasu01 {
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
・・・・・・
・・・・・・
・・・・・・
}
}
の中の・・・・・・の部分にプログラムを書き
込むことで、任意のプログラムを作成できます。
登録:
投稿 (Atom)
円周率を求める (その7)
円周率を求めるにあたり、どうしても変数に許 されるメモリー上の制限がある。これにより通常 の変数は15桁迄となっている。 JAVAでは、その制限に対する解決策として、 BigIntegerクラスの整数型の変数が使えるので、 これを使って、より高精度な円周率を求めてみる これ...

-
円周率を求めるにあたり、どうしても変数に許 されるメモリー上の制限がある。これにより通常 の変数は15桁迄となっている。 JAVAでは、その制限に対する解決策として、 BigIntegerクラスの整数型の変数が使えるので、 これを使って、より高精度な円周率を求めてみる これ...