グラフ関数電卓 - 高速素因数分解、15桁対応

2020/08/15
追記:2020/08/15
修正:2020/08/17
追記:2020/08/21
追記・修正:2020/10/11
Windowsアプリアップデート&追記修正:2020/12/06
バグフィックス:2021/01/02

以前、fx-5800P の素因数分解の高速化プログラムを紹介しています。
fx-5800P 素因数分解 - 高速化

さらに、これをグラフ関数電卓に移植しました。
 グラフ関数電卓用 FactorG のダウンロード [2021/01/02 バグフィックス]
  バグフィックス:終了時に行列を解放しない点を修正し、不要なWhileEndを削除しました。
このプログラムは、純正Casio Basic用であり、純正Casio Basic は計算精度が得られるのは最大 10桁に制限されているので、プログラムの入力値は最大10桁になっていて、10桁を超えるとエラーを出して終了するようにしています。

その後、この FactorG を fx-CG50 の Python モード(Casio Python) に移植し、さらに15桁対応しました。
Casio Python - 要素数の多いリスト:高速素因数分解(5)

そこで、Casio Basic プログラムも15桁入力対応しようと考えました。純正Casio Basicでは、10桁の精度しかありません。しかし、上位互換であるアドイン版Casio Basic - C.Basic では15桁まで計算精度が得られるので、今回は C.Basic で走らせることを前提にして、純正Casio Basicで作った FactorG プログラムを15桁対応に変更します。


15桁入力に拡張するための条件

15桁入力に拡張するには計算精度が15桁であることが条件で、それを満たすのは、グラフ関数電卓のなかで、Pythonモード (Casio Python) と アドイン版 Casio Basic (C.Basic) が走る下記のモデルが必要です。

Casio Python が走るグラフ関数電卓のモデル
  • fx-CG50 OS3.2 以降
  • fx-9750GIII / fx-9860GIII

C.Basic が走るグラフ関数電卓のモデル
  • fx-9860G / fx-9860G SD / fx-9860G Slim (C.Basic for FX)
  • fx-9860GII / fx-9860GII SD (C.Basic for FX)
  • fx-9750GIII / fx-9860GIII (C.Basic for FX)
  • fx-CG20 / fx-CG50 (C.Basic for CG)

15桁入力に拡張した Casio Python スクリプト

以下の記事で紹介しているので、そちらを参照してください。
Casio Python - 要素数の多いリスト:高速素因数分解(5)

スクリプトは下記からダウンロードできます。
FactorG5 - Python スクリプト FactorG5.py (Ver 5.0)

FactorG5_input15 FactorG5_result 


15桁入力に拡張した C.Basic プログラム

今回は、以下のような C.Basic プログラムを作成します。

FactorG2_input15 FactorG2_result2  

そこで、以前作った10桁対応の以下のメインルーチン FACTORG.g3m とサブルーチン WFSUB.g3m を修正する作戦で進めます。そのために、以前作成した 10桁対応の FACTORG をダウンロードしておきます。
10桁対応の FACTORG ファイルのダウンロード [2021/01/02 バグフィックス]
  バグフィックス:終了時に行列解放しない点を修正し、不要なWhileEndを削除しました。

ダウンロードしたファイル FactorG.zip には、FXシリーズ (fx-9860G, fx-9860GII, fx-9750GIII, fx-9860GIII)で使える g1m ファイル、CGシリーズ (fx-CG20, fx-CG50) で使える g3m ファイル、そしてテキストファイルを同梱しています。C.Basic は、テキストファイルを読み込んで実行したり、g3m ファイルや g1m ファイルに変換できます。そこでテキストファイルをメモ帳で編集して 15桁対応に変更し、それを読み込んでからプログラムファイルに変換します。

さらに、15桁精度に対応していない純正Casio Basic で走らせることは考えなくて良いので、純正 Casio Basic に未対応の C.Basic 独自の拡張コマンドを活用してゆきます。

C.Basic については、FXシリーズ用の C.Basic for FX、そして CGシリーズ用の C.Basic for CG があり、それぞれ対応したバージョンをインストールして使えます。fx-9860G 以降の全てのグラフ関数電卓に対応しています。C.Basic については、下記 から必要なダウンロード、必要な説明を参照できます。 
アドイン版 Casio Basic - トップページ

今回は、fx-CG50C.Basic for CG を使います。


15桁入力対応高速素因数分解プログラムへの修正箇所

FACTORG
{1,22}->Dim Mat Z  ◀修正対象
"NUMBER"?->F
If F<1 Or F>=1Exp10 ◀ 修正対象
Then "NUMBER MUST BE >=1 And <1Exp10" ◀修正対象
Stop
IfEnd
If F<>Int (F)
Then "NUMBER MUST BE AN INTEGER" ◀修正対象
Stop
IfEnd
For 1->E To 22  ◀修正対象
0->Mat Z[1,E]
Next
0->Mat Z[1,1]  ◀修正対象
0->Mat Z[1,12]  ◀修正対象
0->E
F->A
Int (Sqrt(A))->C
2->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
3->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
5->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
7->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
11->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
                             ◀追加
While 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
・・・
・・・  ◀このWhileループは全面差替え
・・・
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB":B>C=>Goto 1
WhileEnd

Lbl 1
If A>1
Then Isz E
A->Mat Z[1,E]
1->A
1->Mat Z[1,E+11] ◀修正対象
IfEnd
Int (E/6)->D
E-6*D>0=>Isz D
1->C

Lbl 2
ClrText
Locate 1,1,F    ◀修正対象
Locate 12,1,C  ◀修正対象
Locate 13,1,":" ◀修正対象
Locate 14,1,D  ◀修正対象
6*(C-1)+1->B
Locate 1,2,Mat Z[1,B]    ◀修正対象
Locate 11,2,"^("        ◀修正対象
Locate 13,2,Mat Z[1,B+11] ◀修正対象
Locate 16,2,")"         ◀修正対象
If B+1<=E
Then Locate 1,3,Mat Z[1,B+1] ◀修正対象
Locate 11,3,"^("         ◀修正対象
Locate 13,3,Mat Z[1,B+12]    ◀修正対象
Locate 16,3,")"          ◀修正対象
IfEnd
If B+2<=E
Then Locate 1,4,Mat Z[1,B+2] ◀修正対象
Locate 11,4,"^("         ◀修正対象
Locate 13,4,Mat Z[1,B+13]    ◀修正対象
Locate 16,4,")"          ◀修正対象
IfEnd
If B+3<=E
Then Locate 1,5,Mat Z[1,B+3] ◀修正対象
Locate 11,5,"^("         ◀修正対象
Locate 13,5,Mat Z[1,B+14]    ◀修正対象
Locate 16,5,")"          ◀修正対象
IfEnd
If B+4<=E
Then Locate 1,6,Mat Z[1,B+4] ◀修正対象
Locate 11,6,"^("         ◀修正対象
Locate 13,6,Mat Z[1,B+15]    ◀修正対象
Locate 16,6,")"          ◀修正対象
IfEnd
If B+5<=E
Then Locate 1,7,Mat Z[1,B+5] ◀修正対象
Locate 11,7,"^("         ◀修正対象
Locate 13,7,Mat Z[1,B+16]    ◀修正対象
Locate 16,7,")"          ◀修正対象
IfEnd

While Getkey:WhileEnd     ◀修正対象

Do
Getkey->K            ◀修正対象
LpWhile K=0
While Getkey            ◀修正対象 
WhileEnd             ◀修正対象
0->M
If K=47 Or K=44
Then 1->M
Else If K=27 Or K=37 Or K=31
Then 2->M
Else If K=28 Or K=38 Or K=41
Then 3->M
Else Goto 2
IfEnd:IfEnd
IfEnd

If M=1
Then ClrText
"DONE"
Else If M=2
Then Isz C
C>D=>1->C
Goto 2
Else If M=3
Then C-1->C
C<1=>D->C
Goto 2
IfEnd:IfEnd
IfEnd
ClrMat Z


WFSUB
E+1->E
B->Mat Z[1,E]
Do
D->A
Mat Z[1,E+11]+1->Mat Z[1,E+11] ◀修正対象
A/B->D
LpWhile Frac (D)=0
Int (SqrtA)->C
Return


上でダウンロードした FactorG.zip に同梱してあるテキストファイル FACTORG.txt を編集し、以下の具体的な変更を行います。完成した後、C.Basic 内蔵機能により g3m ファイルに変換して完成させます。


(1) 不要な初期化を削除
For 1->E To 22
0->Mat Z[1,E]
Next
0->Mat Z[1,1]
0->Mat Z[1,12]

0->E
F->A


変数の初期化のうち、For 文で行列 Z を全て 0 に初期化されているので、上記赤文字の初期化は不要です。従って削除します。


(2) 行列の確保領域の拡大に伴う変更
入力桁数を拡大するにともない、見つかる素因数の数も増えるので、素因数を格納する行列をほぼ倍に拡大します。
オレンジ色で示した部分は、以下のようにします。修正部分は赤文字にします。
行列確保の 2142 に変更、1121 に変更します。


FACTORG2
{1,42}->Dim Mat Z
・・・
For 1->E To 42
0->Mat Z[1,E]
Next

・・・
1->Mat Z[1,E+21]


WFSUB2
・・・
Mat Z[1,E+21]+1->Mat Z[1,E+21]
・・・


(3) 入力値の桁数制限を15桁にするための変更
入力値の制限とエラーメッセージを15桁対応にするため、修正文を赤文字にします。

FACTORG2
If F<1 Or F>=1Exp15
Then "NUMBER MUST BE    >=1 And <1Exp15"
Stop
IfEnd
If F<>Int (F)
Then "NUMBER MUST BE    AN INTEGER"


エラーメッセージは、BE のあとのスペースを7個にしすることで、表示した時に改行したようにみせます。


(4) Lbl 2 以下を、入力値と素因数の桁数増加に合わせて変更

C.Basic は計算精度は15桁ですが、設定によっては数値を出力する際に10桁を超えると指数表示になります。C.Basic では Norm の機能が拡張されていて、プログラム冒頭で Norm15 と記述するだけで 15桁までは指数表示されないように設定できます。今回はもう一つの方法として、数値を文字列に変更して Locate で出力する方法で変更してみます。Norm15 の方がスマートでコードがスッキリするかも知れませんが、今回は文字列を使うベタなやり方にしてみます。

以下のサンプルプログラムを見て下さい。

?->F
ToStr(F)->Str 1
log F>=10=>ToStr(Int(F÷E10))+ToStr(F-Int(F÷E10)×E10 )->Str 1
Locate 1,1,Str 1


値を入力させ、それを文字列に変換してLocate で出力するサンプルです。このコードを使います。

画面1行目に入力値と出力ページを出力する部分は、以下のようになります。変更箇所は赤文字で示します。

Lbl 2
ClrText
ToStr(F)->Str 1
log F>=10=>ToStr(Int (F/Exp10))+ToStr(F-Int (F/Exp10)*Exp10)->Str 1

Locate 1,1,Str 1
Locate 18,1,C
Locate 19,1,":"
Locate 20,1,D


このコードの下に、求めた素因数を1ページ分出力するコードが続きます。以下のように修正します。変更箇所は赤文字で示します。

6*(C-1)+1->B
Mat Z[1,B]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,2,Str 1
Locate 16,2,"^("
Locate 18,2,Mat Z[1,B+21]
Locate 21,2,")"
If B+1<=E
Then
Mat Z[1,B+1]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,3,Str 1
Locate 16,3,"^("
Locate 18,3,Mat Z[1,B+22]
Locate 21,3,")"
IfEnd
If B+2<=E
Then
Mat Z[1,B+2]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1

Locate 1,4,Str 1
Locate 16,4,"^("
Locate 18,4,Mat Z[1,B+23]
Locate 21,4,")"
IfEnd
If B+3<=E
Then
Mat Z[1,B+3]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1

Locate 1,5,Str 1
Locate 16,5,"^("
Locate 18,5,Mat Z[1,B+24]
Locate 21,5,")"
IfEnd
If B+4<=E
Then
Mat Z[1,B+4]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,6,Str 1

Locate 16,6,"^("
Locate 18,6,Mat Z[1,B+25]
Locate 21,6,")"
IfEnd
If B+5<=E
Then
Mat Z[1,B+5]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1

Locate 1,7,Str 1
Locate 16,7,"^("
Locate 18,7,Mat Z[1,B+26]
Locate 21,7,")"
IfEnd


(5) 素因数探索コード自体の変更

最初に素数2,3,5,7、11 で割り算して素因数を探索する部分は、さらに素数 13 で割り算するように追加します(赤文字)。

Int (Sqrt(A))->C
2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
3->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
5->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
7->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
11->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
13->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1



さて、これに続くWhile ループでは、以下のように Bに増分 (4, 2, 4, 6, ...) を加えて探索数とし、それで割り算して探索数を得る処理を1行で記述している。
While 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1

・・・
・・・
・・・

以前作っているコードでは、2,3,5,7 のいずれの倍数でもない 13 ~ 222 までの 48 個の探索数を用いている。今回は探索数を増やすため、2, 3, 5, 7, 11 のいずれの倍数でもない 17~2325までの 480 個の探索数に拡張して、さらに高速化を試みます。

但し、探索数の増分の計算そして 480 行の記述をエディタで作成するのは非現実的なので、480個の増分の計算とWhlle ループの中の480行の記述を作成して出力するWindowsアプリを作って、カット&ペーストで一気に作成することにします。

 FactorG2 作成支援 Windowsアプリ - SearchNumCG11 のダウンロード

ダウンロードするファイル SearchNumCB11.zip には、実行ファイル SearchNumCB11.exe と C#のソースファイルを同梱しています。 Visual Studio 2019 Community で作成しました。

実際にタイプして作った肝心のコードは以下です。
(参考) C# では、以下の CalcNum() 関数の実装部分と CalcNum() 関数を呼び出す1行の記述(合計21行)以外は一切コーディングせず、プロパティの設定を行うだけでWindowsアプリを作れることを申し添えておきます。チョット慣れれば、この程度の簡易的なWindowsアプリが簡単かつ迅速に作れるので、大変お勧めです。C#入門講座 など、ご自分に合った入門講座を探してみて下さい。
#foreachループ内の Result.AppendText() は速度低下するけど、この程度なら許せるので許してください。Casio Basic作成支援やCasio Pyton作成支援で作った一連のSearchNumでは、この速度低下に対応したものもあります。詳しくはダウンロードしたソースを見てください。


private void CalcNum()
{
 int prev_num = 13;
 int m = 17;
 int n = 2*3*5*7*11;
 int line = 0;
 String str = "";
 foreach (int num in Enumerable.Range(m,n))
 {
  if ((num % 2) * (num % 3) * (num % 5) * (num % 7) * (num % 11) != 0)
  {
   str = "B+" + (num - prev_num).ToString() + "->B:A/B->D:Frac (D)=0=>Prog \"WFSUB2\":B>C=>Goto 1";
   prev_num = num;
   Result.AppendText(str + "\r\n");
   line++;
  }
 }
 Result.AppendText("\r\n" + line.ToString() + " lines");
 Calc.Enabled = false;
}

整数 num に 17~2326 までの整数を適用し、num が 2, 3, 5, 7, 11 のいずれかの倍数でもない時の num を探索数と識別し、1つ前の num との差 (num - prev_num) を [増分] とし、順次
B+[増分]->B:A/B->D:Frac (D)=0=>Prog "WFSUB2:B>C=>Goto 1
をテキストボックスに出力します。

さっそく SearchNumCB11.exe を起動します。
SearchCB11_input 

[Calculate] ボタンをクリックすると必要な記述が出力されます。
SearchCB11_result 

テキストボックス内は、自由に編集ができます。テキストボックスから必要な部分をカットコピーし、エディタで開いた FACTORG2.txt のなかで該当する While 1WhileEnd の間にペーストします。

例えば、テキストボックスで [Ctrl]+[A] で全てを選択し、[Shift]+[↑] を押してから [Ctrl]+[C] でコピーし、エディタで開いた FACTORG2.txt の 該当部分に [Ctrl]+[V]でペーストします。これで、480行のコードが一気に完成します。

一見回りくどいようですが、タイプミスの抑制と作業全体のタイプ量の大幅な節約、そしてなにより時間の節約になったと思います。


(6) 出力に色を付け、同じコードでモノクロ液晶機種用 g1m ファイルとの互換性を保つ

目標の出力を以下のようにします。
FactorG2_result2 

入力値を、乗数の ^( )で出力するには、red Locateblue Locateとします。
但し、色指定は カラー液晶を搭載した fx-CGシリーズのみで有効となり、モノクロ液晶の fx-9860Gシリーズや fx-9750GIII ではエラーになります。そこで、C.Basic の拡張コマンド System(-1) を使って機種判定を行い、CGシリーズの時は色指定をしたLocateコマンドを実行し、そうでない時は色指定なしの Locate コマンドを実行させれば良いわけです。
System(-1) は、CGシリーズでは 10 以上の整数を返し、それ以外では1桁の整数を返します。

そこで、プログラムの冒頭で機種判断を行うことにします。
0->G:System(-1)>=10=>1->G

このように、変数G を 0 で初期化しておき、CGシリーズの時は 1 になるようにしておきます。

CGシリーズで赤で出力する場合、モノクロ機種で色指定をしないために、
If G:Red Locate 1,1,Str 1
Else Locate 1,1,Str 1:IfEnd


CGシリーズで青で出力する場合、モノクロ機種で色指定をしないために、
If G:Blue Locate 16,2,"^("
Else Locate 16,2,"^(":IfEnd


If G:Blue Locate 21,2,")"
Else Locate 21,2,")":IfEnd


とします。

以上を適用すると Lbl 2 以降は、以下のようになります。修正した部分を赤文字で示します。

Lbl 2
ClrText
ToStr(F)->Str 1
log F>=10=>ToStr(Int (F/Exp10))+ToStr(F-Int (F/Exp10)*Exp10)->Str 1
If G:Red Locate 1,1,Str 1
Else
Locate 1,1,Str 1:IfEnd
Locate 18,1,C
Locate 19,1,":"
Locate 20,1,D
6*(C-1)+1->B
Mat Z[1,B]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,2,Str 1
If G:Blue Locate 16,2,"^("
Else
Locate 16,2,"^(":IfEnd
Locate 18,2,Mat Z[1,B+21]
If G:Blue Locate 21,2,")"
Else
Locate 21,2,")":IfEnd
If B+1<=E
Then
Mat Z[1,B+1]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,3,Str 1
If G:Blue Locate 16,3,"^("
Else
Locate 16,3,"^(":IfEnd
Locate 18,3,Mat Z[1,B+22]
If G:Blue Locate 21,3,")"
Else
Locate 21,3,")":IfEnd
IfEnd
If B+2<=E
Then
Mat Z[1,B+2]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,4,Str 1
If G:Blue Locate 16,4,"^("
Else
Locate 16,4,"^(":IfEnd
Locate 18,4,Mat Z[1,B+23]
If G:Blue Locate 21,4,")"
Else
Locate 21,4,")":IfEnd
IfEnd
If B+3<=E
Then
Mat Z[1,B+3]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,5,Str 1
If G:Blue Locate 16,5,"^("
Else
Locate 16,5,"^(":IfEnd
Locate 18,5,Mat Z[1,B+24]
If G:Blue Locate 21,5,")"
Else
Locate 21,5,")":IfEnd
IfEnd
If B+4<=E
Then
Mat Z[1,B+4]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,6,Str 1
If G:Blue Locate 16,6,"^("
Else
Locate 16,6,"^(":IfEnd
Locate 18,6,Mat Z[1,B+25]
If G:Blue Locate 21,6,")"
Else
Locate 21,6,")":IfEnd
IfEnd
If B+5<=E
Then
Mat Z[1,B+5]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,7,Str 1
If G:Blue Locate 16,7,"^("
Else
Locate 16,7,"^(":IfEnd
Locate 18,7,Mat Z[1,B+26]
If G:Blue Locate 21,7,")"
Else
Locate 21,7,")":IfEnd
IfEnd


以上のようにすると、CGシリーズでもそれ以外でも互換性を保って動作可能になります。


(7) Getkey を Getkey1 に変更する
今回は、C.Basic専用のプログラムに変更するので、純正 Casio BasicGetkey コマンドを C.Basic拡張コマンド Getkey1 に置き換えます。Getkey コマンドは キーが押されるその時に実行されると キーコードを取得する仕様なので、キー取得はループの中に Geteky を記述しなければなりません。キー入力で動作を分岐する動作が連続するとき、同じキーを少し長めに押すと連続して同じキーが押されたと誤判定されることがあり、その際は 
While Getkey:WhileEnd
を記述して、キーが離されないと先に進めない機能(関所の機能)を設ける必要があります。

一方で、C.Basicの拡張コマンド Getkey1 は、キーが押されるまで待つ機能が付加されます。するとキーが離されないと先に進めないようにするループが不要になります。

(6) で検討した結果を出力するコードに続く、結果表示のページを切り替えるためのキー入力コードは以下のようになっています。

While Getkey:WhileEnd

Do
Getkey->K
LpWhile K=0
While Getkey
WhileEnd


Getkey->KGetkey1->K に変更した上で、以下のように変更できます。

Do
Getkey1->K
LpWhile K=0


変更前の以下のコードに含まれる2箇所の While Getkey:WhileEnd を削除します。


(8) g1m ファイルと g3m ファイルに変換する

これまでは、テキストファイルで編集してきました。C.Basic では、テキストファイルから g3m ファイルや g1m ファイルに変換できます。

FACTORG2.txtfx-CG50 に転送します。

次に、C.Basic のファイルリスト画面で FACTORG2.txt を選択
Select_txt_file 

[F6] (▷) を押し、
Coverting_txt_file 

さらに、[F1] (CONVERT) を押し、
Coverte_txt_file 

[F2] (g1m) を押せば、g1m ファイルに変換され、
[F3] (g3m) を押せば、g3m ファイルに変換されます。



15桁対応、高速素因数分解 - FACTORG2.g3m の実行

 ダウンロード:15桁対応・高速素因数分解 FACTORG2 (for C.Basic) 
  [2021/01/02 バグフィックス] バグフィックス:終了時に行列解放しない点を修正しました。

参考のため、以前作った Pythonモード (Casio Python) の FactorG5.py の実行結果と比較します。

search_30445_f  CBResult2_1 

Search_39969_f  CBResult2_2 

seach_47824_f  CBResult2_3 
Case1_14digit  CBResult2_4 

search_90872_f  CBResult2_5 

search_189426_f.png  CBResult2_6 
search_263027_f.png  CBResult2_7 

search_343013_f.png  CBResult2_8 

search_2025804_f.png  CBResult2_9 
search_4349444_f.png  CBResult2_10 


表2- 15桁版高速素因数分解実行時間の違い - Casio Python と C.Basic の比較
    (fx-CG50 OS3.4 使用)
Casio Python
FactorG5.py
C.Basic
FACTORG2.g3m
 WFSUB2.g3m
高速化
入力値実行時間 [秒]実行時間 [秒]時間差 [%]
547,896,321,054,789 8.74.350.6
7,845,162,037,849 11.45.452.6
748,159,026,374,815 13.76.453.3
36,209,518,473,620 15.57.551.6
986,753,421,098,675 
26.011.854.6
96,835,724,130,261 52.724.952.8
748,159,026,396,835 73.134.353.1
96,835,724,136,209 95.344.653.2
748,159,026,336,209 585.0
(9分45秒)
255.8
 (4分15.8秒)
56.3
362,095,184,736,209 1,235.6
(20分35.6秒)
553.3
(9分13.3秒)
55.2

Casio Python よりも C.Basic が2倍程度高速だと分かりました。

現状の Casio Python では、動作中にリアルタイムでキー入力を受け付けることができません。一方、純正 Casio BasicC.Basic ではリアルタイムキー入力が可能なので、プログラミング言語としてはより実用的と言えます。


さらに高速化する [2020/08/15 追記]

さらに高速化するために今回拡張した While ループ内で実行する探索数をさらに増やしてみました。

素数での割り算を2~13に加えて17での割り算を追加し、それに続く Whileループでの素因数探索を 2, 3, 5, 7, 11, 13のいずれの倍数でない整数で割り算するように拡張してみました。すると、このループ内は 5760 行となります。上と同様に新たに専用Windowsアプリを作成し、カット&ペーストで追加し、FACTORG3.g3m を作成しました。

FACTORG3.g3m 作成支援アプリ - SearchNumCB13 ver2.0 のダウンロード 
 ※ [2020/12/06 ver2.0 にアップデート - 処理の大幅な高速化]

これを実行すると以下のように出力されます。
SearchCB13_result

5760行ものコードを追加すると、FACTORG3.g3m のファイルサイズは 210,028 バイト (210Kバイト) になり、上で作った FACTORG2.g3m の10倍程度の大きなファイルです。

幸い fx-CG50 では実行可能で、上で作成した FACTORG2.g3m よりも 7% 程度高速化しました。
15桁対応高速素因数分解プログラム - FACTORG3.zip のダウンロード

現在のところ、C.Basic for CG で動作する FACTORG3.g3m が最速です。
但し、ファイルサイズがあまりにも大きくメモリを無駄食いする割に、7%程度の高速化なので、管理人としては FACTORG2.g3m を推奨したいと思います。

なお、FACTORG3.zip に同梱している FACTORG3.g1m (モノクロ機種用) は、C.Basic for FX ではファイルサイズが大きすぎて実行できないので、上で作った FACTORG2.g1m がモノクロ液晶機種対応としては、最速になります。従って、g1m と g3m で互換性のある FACTORG2 (g1m/g3m互換) をやはり推奨したいと思います。


もう一段高速化を試みる

探索数をさらに拡張した FACTORG4.g3m について
同様に、FACTORG4 作成支援アプリ SearchNumCB17 [2020/12/06 Ver2.0 にアップデート、処理の高速化]  を作って実行させると、なんと 92160 行ものコードを生成します。

SearchCB17_result

この出力をカット&ペーストして、テキストファイル FACTORG4.txt を作成すると 4787 Kバイト (4.8Mバイト) となり、fx-CG50 のストレージメモリの最大容量である 1.6 Mバイトを超えてしまい、メモリ不足で fx-CG50 に転送できません。ここが限界のようです。

最速は、FACTORG3.g3m で、実用的には FACTORG2.g3m で十分だという結論にしておこうと思います。
===== [2020/08/15 追記] 終わり =====


モノクロ機種での FACTORG2.g1m の実行

fx-9750GIII で 15桁対応高速素因数分解 - FACTORG2.g1m を実行してみます。 

CBMResult 

CBMResult_11 CBMResult_12 CBMResult_13 

fx-9750GIIIfx-9860Gシリーズ (fx-9860GIIIfx-9860GII, fx-9860GII SDfx-9860G, fx-9860G SD, fx-9860G Slim) にインストールした C.Basic for FX でも自動機種判定がうまくいって、同様の出力が得られることが確認できました。


今回作成したコード (テキストファイルの表記)

 ダウンロード:15桁対応・高速素因数分解プログラム - FACTORG2 (for C.Basic)

今回紹介したような支援アプリを使わないと到底作成ができないことがよく分かります。


FACTORG2.txt
0->G:System((-)1)>=10=>1->G
{1,42}->Dim Mat Z
"NUMBER"?->F
If F<1 Or F>=1Exp15
Then "NUMBER MUST BE >=1 And <1Exp15"
Stop
IfEnd
If F<>Int (F)
Then "NUMBER MUST BE AN INTEGER"
Stop
IfEnd
For 1->E To 42
0->Mat Z[1,E]
Next
0->E
F->A
Int (Sqrt(A))->C
2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
3->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
5->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
7->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
11->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
13->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
While 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+14->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+10->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+14->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+8->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+6->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+4->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+2->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
B+12->B:A/B->D:Frac (D)=0=>Prog "WFSUB2":B>C=>Goto 1
WhileEnd

Lbl 1
If A>1
Then Isz E
A->Mat Z[1,E]
1->A
1->Mat Z[1,E+21]
IfEnd
Int (E/6)->D
E-6*D>0=>Isz D
1->C

Lbl 2
ClrText
ToStr(F)->Str 1
log F>=10=>ToStr(Int (F/Exp10))+ToStr(F-Int (F/Exp10)*Exp10)->Str 1
If G:Red Locate 1,1,Str 1
Else Locate 1,1,Str 1:IfEnd
Locate 18,1,C
Locate 19,1,":"
Locate 20,1,D
6*(C-1)+1->B
Mat Z[1,B]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,2,Str 1
If G:Blue Locate 16,2,"^("
Else Locate 16,2,"^(":IfEnd
Locate 18,2,Mat Z[1,B+21]
If G:Blue Locate 21,2,")"
Else Locate 21,2,")":IfEnd
If B+1<=E
Then
Mat Z[1,B+1]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,3,Str 1
If G:Blue Locate 16,3,"^("
Else Locate 16,3,"^(":IfEnd
Locate 18,3,Mat Z[1,B+22]
If G:Blue Locate 21,3,")"
Else Locate 21,3,")":IfEnd
IfEnd
If B+2<=E
Then
Mat Z[1,B+2]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,4,Str 1
If G:Blue Locate 16,4,"^("
Else Locate 16,4,"^(":IfEnd
Locate 18,4,Mat Z[1,B+23]
If G:Blue Locate 21,4,")"
Else Locate 21,4,")":IfEnd
IfEnd
If B+3<=E
Then
Mat Z[1,B+3]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,5,Str 1
If G:Blue Locate 16,5,"^("
Else Locate 16,5,"^(":IfEnd
Locate 18,5,Mat Z[1,B+24]
If G:Blue Locate 21,5,")"
Else Locate 21,5,")":IfEnd
IfEnd
If B+4<=E
Then
Mat Z[1,B+4]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,6,Str 1
If G:Blue Locate 16,6,"^("
Else Locate 16,6,"^(":IfEnd
Locate 18,6,Mat Z[1,B+25]
If G:Blue Locate 21,6,")"
Else Locate 21,6,")":IfEnd
IfEnd
If B+5<=E
Then
Mat Z[1,B+5]->z
ToStr(z)->Str 1
log z>=10=>ToStr(Int (z/Exp10))+ToStr(z-Int (z/Exp10)*Exp10)->Str 1
Locate 1,7,Str 1
If G:Blue Locate 16,7,"^("
Else Locate 16,7,"^(":IfEnd
Locate 18,7,Mat Z[1,B+26]
If G:Blue Locate 21,7,")"
Else Locate 21,7,")":IfEnd
IfEnd

Do
Getkey1->K
LpWhile K=0
0->M
If K=47 Or K=44
Then 1->M
Else If K=27 Or K=37 Or K=31
Then 2->M
Else If K=28 Or K=38 Or K=41
Then 3->M
Else Goto 2
IfEnd:IfEnd
IfEnd

If M=1
Then ClrText
"DONE"
Else If M=2
Then Isz C
C>D=>1->C
Goto 2
Else If M=3
Then C-1->C
C<1=>D->C
Goto 2
IfEnd:IfEnd
IfEnd
ClrMat Z


WFSUB.txt
E+1->E
B->Mat Z[1,E]
Do
D->A
Mat Z[1,E+21]+1->Mat Z[1,E+21]
A/B->D
LpWhile Frac (D)=0
Int (SqrtA)->C
Return







応援クリックをお願いします。励みになるので...
にほんブログ村 IT技術ブログ 開発言語へ


 


keywords: プログラム関数電卓、fx-CG50、C.Basic、素因数分解、プログラミング、Casio Basic

リンク集 | ブログ内マップ
関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

リンクの不備について

福島のmomo様

リンクの不備について、ご指摘頂きありがとうございます。
修正しました。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます
最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム電卓は、プログラムを作って、使ってナンボ!

プログラム電卓を実際に使って気づいたこと、自作プログラム、電卓での Casio Basic や Casio Python プログラミングについて書いています。

なお管理人はカシオ計算機の関係者ではなく、Casio Basicが面白いと感じる1ユーザーです。


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR