Casio 関数電卓の素因数分解

  全面改定 2021/06/05
追記修正 2021/06/06
追記修正 2023/09/24


当ブログでは、素因数分解に関する記事を多く書いています。

内蔵の素因数分解よりも速いプログラムを電卓で作りたくなった

ある日購入した関数電卓 (fx-995ES) に、素因数分解機能が搭載されていました。入力する整数は10桁以内に制限されるし、算出する素因数が4桁を越えるとエラーになる、といった不十分なものでしたが、プログラム関数電卓 fx-5800P で素因数分解プログラムを作ってみようと思わせるには十分でした。

関数電卓内蔵の素因数分解機能は不十分とは言え、その演算速度はCasio Basic ブログラムよりも遥かに速いものでした。そこで、電卓で走る素因数分解プログラムの高速化を様々なアプローチで記事にしています。

本記事では、電卓での素因数分解プログラムの高速化の履歴を紹介してゆきます。
  以下で紹介するプログラムは プログラムライブラリ - 高速素因数分解 からダウンロードできます。



関数電卓内蔵の素因数分解機能
カシオの関数電卓で、初めて素因数分解機能が搭載されたのが、国内で2012年12月に発売された fx-995ES です。これに対応する北米モデルでは fx-115ES PLUS で、2019年に発売された不法コピー対策品の fx-115ES PLUS 2nd edition にも搭載されています。
 ⇒ fx-995ES のカタログ
 ⇒ 電卓総合カタログ 2013年8月版
  fx-115ES PLUS 2nd edition の概要

fx-995ES の後継機で日本国内発売された fx-JP900 そして fx-JP900CW にも素因数分解機能が継承され、機能が向上し高速化しました。fx-JP900CW は fx-JP900 より僅かに速く、最速モデルです。[2023/09/24 追記]
  fx-JP900 (その3)
  fx-JP900CW の概要

素因数分解機能が本当に必要かどうかは別として、この機能が内蔵されているモデルを紹介しておきます;
fx-115ES PLUSfx-115ES PLUS 2nd edition は北米モデルです。
 
fx-995ES    FX-115ESPLUS_larg   fx-JP900_1    fx-115esplus2_large    fx-JP900CW
   fx-995ES     fx-115ES PLUS    fx-JP900    fx-115ES PLUS    fx-JP900CW
                                                                          
2nd edition



Casio Basic プログラムでの素因数分解 - 内蔵機能よりも遙かに遅い
最初に fx-5800P の Casio Basic で作った素因数分解プログラムやそのデバッグ版を以下で紹介しています;
  fx-5800P で素因数分解
  fx-5800P で素因数分解再び
  fx-5800P 素因数分解 - バグ修正と表示変更

いずれせよ作ったプログラムは、関数電卓内蔵の機能よりも遙かに遅いものでした。そこで、VBAで作ればどの程度速いのかを確かめたり、よりCPUが強力なグラフ関数電卓 fx-9860GII にプログラムを移植してみました。
  fx-9860GII への移植 - 素因数分解
  VBAで素因数分解


Casio Basic プログラムでの高速化素因数分解 - 高速化、しかしまだ遅い
電卓上のプログラムのロジックを改善することで、処理速度が4倍高速化することが判りました;
  fx-5800P 素因数分解 - 高速化

fx-995ES の内蔵機能では、算出できる素因数が4桁までしか対応していなかったのに対して、fx-JP900fx-JP900CW では6桁まで拡張され、具体的には素因数が 1,018,081 未満の時は素因数分解可能になりました。但し10桁を超える入力は仕様外であり、エラーが表示されます。一方、このような制限は、Casio Basicプログラムにはありません。

しかし、Casio Basic プログラムでの処理速度は依然として関数電卓の内蔵機能には遠く及びません。


Casio Python での素因数分解 - fx-CG50、高速化、内蔵機能に追いつく
2020年に公開された fx-CG50 のOSアップデート (OS3.40) で Pythonモードが追加さ、その後公開された OSアップデートでも Python が使えるようになりました。そこで Casio Basic の高速化素因数プログラム (上記) の高速化ロジックを Casio Python に移植してみると、fx-JP900 や fx-JP900CW の内蔵機能とほぼ同じ処理速度になることが判りました。
  Casio Python - シェル入力画面の工夫:高速素因数分解(1)
  Casio Python - Pythonらしい反復処理:高速素因数分解(2)

内蔵機能も Casio Basic プログラムも、それらの仕様 (10桁精度) により 10桁以下の素因数分解しかできませんが、Casio Python では15桁の精度があるので、素因数分解も 15桁に対応できるように改善できました;
  Casio Python - 大きな数の計算:高速素因数分解(3)
  Casio Python - 関数呼出オーバーヘッド:高速素因数分解(4)


Casio Python での素因数分解 - fx-CG50、高速化、内蔵機能を超える
高速化素因数分解の基本的なロジックはそのままに細かい改善を行うことで、さらに10%高速化できました;
  Casio Python - 要素数の多いリスト:高速素因数分解(5)
  Casio Python - 10進数除算の出力と精度:高速素因数分解(7)

この細かい改善検討では、高速化するためには使えるものは何でも使うようにし、具体的には Pythonモード で使う大きなリストの要素を PCプログラム(C#)で生成して、それをカット&ペーストしてスクリプトを完成させました。

その結果 fx-JP900 や fx-JP900CW よりも高速な素因数分解が実現しました。

ちなみに、ここで行った細かい改善とPCプログラムでコード生成する上の方法を再び Casio Basicプログラムに援用して fx-5800P の Casio Basic に移植したところ、元のプログラムよりも9%程度高速化しましたが、fx-JP900 や fx-JP900CW 内蔵機能には遠く及びません。fx-5800P の限界まで高速化した (電卓のメモリに格納可能な最大サイズのプログラムに達した) ので、これ以上は難しいと思われます。
  fx-5800P 素因数分解 - さらなる高速化


Casio Python での素因数分解 - fx-9750GIII、内蔵機能と同等の速さ
2020年10月に、fx-9750GIIIfx-9860GIII のOSアップデート (OS3.40) に伴い Python モードが追加されました。fx-CG50 の Casio Python よりも動作は遅いのですが、それでも十分な処理速度を有しています。

そこで、fx-CG50 の Casio Python スクリプトを fx-9750GIII / fx-9860GIII の Python スクリプトでも共通して動作するように修正したところ、fx-JP900 や fx-JP900CW の内蔵機能とほぼ同じ処理速度になることが判りました。
  高速素因数分解 FactorG ver 7.1


C.Basic での素因数分解 - Casio Python から C.Basic への移植 - さらに高速化
15桁対応し fx-JP900 や fx-JP900CW の内蔵素因数分解機能と同等以上の高速化を実現した Casio Pyshon のスクリプトを C.Basic に移植したところ、さらに明確な時間差での高速化できました。ここでも、何百行かのコードを C# プログラムで生成してカット&ペーストする手法を使いました。
  fx-CG50 / fx-9750GIII - C.Basic で素因数分解15桁対応&高速化



各モデルでの 素因数分解速度の比較 

fx-CG50
を "CG"fx-9750GIII / fx-9860GIII を "FX" と表記します。

78,495,162 の素因数分解 (2 × 3 × 31 × 503 × 839)
◀速い遅い▶
C.Basic (CG)Python (CG)C.Basic (FX)Python (FX)
fx-JP900CW
fx-995ESCasio Basic
この例のように関数電卓内蔵機能で正しく素因数分解できる場合は、C.Basic や Casio Python のプログラムは、内蔵機能の同等以上の演算速度を実現しています。


7,849,516,203 の素因数分解 (32 × 9811 × 88897)
◀速い遅い▶
C.Basic (CG)fx-JP900CWPython (CG)C.Basic (FX)Python (FX)fx-995ESCasio Basic

関数電卓 fx-900JP / fx-JP900CW 内蔵機能は、この入力の計算結果を 3× (872168467) と表示。素因数分解に失敗する例です。
カッコ ( ) で示す数値は、仕様上それ以上素因数分解できなかった商です。つまり途中で演算を停止しているので演算が速く終了しているものと考えています。


9,999,999,997 の素因数分解 (13 × 769230769)
◀速い遅い▶
fx-JP900CWC.Basic (CG)Python (CG)
fx-995ES
C.Basic (FX)Python (FX)Casio Basic
関数電卓 fx-900JP / fx-JP900CW 内蔵機能は、この入力の計算結果を 13 × (769230769) と表示。
カッコ ( ) で示す数値は、仕様上それ以上素因数分解できなかった商ですが、偶然にもそれが素因数だった事例です。仕様上素因数分解を途中で止まっているので演算が速く終了していると考えています。


関数電卓内蔵機能よりも高速な素因数分解を C.Basic や Casio Python で達成!


C.Basic を導入できるグラフ関数電卓
GraphingCalc_1


GraphingCalc_2


Casio Python (Pythonモード) を導入できるグラフ関数電卓
fx-CG50_small fx-9750GIII_l   fx9860GIII
     fx-CG50        fx-9750GIII       fx-9860GIII


  Casio プログラム電卓の価格動向


全面改定する前の記事はこちら:(旧) Casio 関数電卓の素因数分解





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


 



keywords: 高速素因数分解Casio Basic、Casio Python、C.Basic、プログラミングプログラム関数電卓

リンク集 | ブログ内マップ

関連記事

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

コメントの投稿

非公開コメント

Re: 数式が美しく

ツル様

管理人にやすです。

> ここの記事の存在を初めて知りました。
> 壁でのご紹介から飛んできました。

ようこそココへ...♪


> 素数を軽んじているようでも、関数電卓をプチコレクションしているのは、
> それぞれの電卓で素因数分解をするためでもあります(笑)

カシオのスタンダード関数電卓だと、素因数分解機能が最初に実装されたのが fx-995ES でした。
次が、fx-JP900。その後 fx-JP500 を会社の机に入れておき、昨日 fx-JP700 が激安(¥2,806 @Amazon)だったのでポチッとしました。これでコンプリートです!


> いつか、数式が美しく見える時がやってくると、それはツルが一皮むけたときなのでしょう。ツルっと・・・

お~い、座布団1枚...

数式が美しく見える前に、コードが美しく見える時がスグ来たりしませんか?

数式が美しく

管理人様

ここの記事の存在を初めて知りました。
壁でのご紹介から飛んできました。
何事にも好奇心の塊であるツルは、学びたい気持ちは捨ててはいないのです。
知ってると便利で楽しくなるだろうからです。
素数を軽んじているようでも、関数電卓をプチコレクションしているのは、
それぞれの電卓で素因数分解をするためでもあります(笑)
いつか、数式が美しく見える時がやってくると、それはツルが一皮むけたときなのでしょう。ツルっと・・・

No title

管理人様、こんにちは!

>「それちゃうで...、ホンマはこうや...」などとご指摘を頂いたりして...(^^;)

なんかそれすごく気になります(笑)


>あ、カシオさんって、電卓関係の主要部署は関東でしたっけ?

某S社は関西、CASIOは関東という認識ですけど、全国にサービスセンターがあるので、関西の方もおられるのでしょうね(^^)

Re: お待たせしました(^^)

sentaro様

>ケーブル再圧着補修ならばきちんと修理できたかの確認検査のため数日必要になると思われますし、もし、液晶基板交換での
>修理なら、修理用基板の在庫で修理日数が変わってきますし、どういう修理がされるのかによって日数は変わってきますよね。

なるほど、言われればそうですね。じっくりと確認検査をして頂きたいものです。


> >をなんと casio.co.jp ドメインから覧頂いています。その前にも fx-JP900 に関する記事を閲覧なさっています。
>
> おお!すごいです!
> 管理人様のブログがCASIO推奨、推薦、公認となる日も近いでしょうか(^^)

なはは、それはないでしょうが...
今日は、「Casio Basicの勧め」のエントリーあたりに見学に来られていました。

「それちゃうで...、ホンマはこうや...」などとご指摘を頂いたりして...(^^;)
あ、カシオさんって、電卓関係の主要部署は関東でしたっけ?

お待たせしました(^^)

管理人様、こんにちは!

いつものようにメインプログラムは管理人様のCasioBasic版からの99%ベタ移植なのですけど、倍精度実数でもかなり速くなりますね(^^)
32ビット整数演算であればさらに10倍速くなるので、多桁でも高速化するべく64ビットの除算を試みるも、倍精度実数よりも遅いという感じになってしまったのでボツになりました(^^;


>私の fx-9860GII は、サクッと入院したのですが、なかなか退院してきません。

ケーブル再圧着補修ならばきちんと修理できたかの確認検査のため数日必要になると思われますし、もし、液晶基板交換での修理なら、修理用基板の在庫で修理日数が変わってきますし、どういう修理がされるのかによって日数は変わってきますよね。


>どこか他にも不具合があったのか、それとも単に修理で立て込んでいるのか、まだよく分かりません。何かあれば、必ずご連絡を頂けるので、気長に待っています。

必ず連絡をいただけるというのがすごく大事なところですね。
信頼できるメーカーとしての真摯な姿勢を感じます(^^)


>をなんと casio.co.jp ドメインから覧頂いています。その前にも fx-JP900 に関する記事を閲覧なさっています。

おお!すごいです!
管理人様のブログがCASIO推奨、推薦、公認となる日も近いでしょうか(^^)

お待ちしておりました

sentaro様

アドイン版素因数分解プログラムのご提供、ありがとうございます。

fx-9860GII が退院してきたら、さっそく動かしてみます。



私の fx-9860GII は、サクッと入院したのですが、なかなか退院してきません。

どこか他にも不具合があったのか、それとも単に修理で立て込んでいるのか、まだよく分かりません。何かあれば、必ずご連絡を頂けるので、気長に待っています。

ところで、当ブログブログのCasio Basic入門38 (超入門編)
http://egadget.blog.fc2.com/blog-entry-174.html
をなんと casio.co.jp ドメインから覧頂いています。その前にも fx-JP900 に関する記事を閲覧なさっています。

チョットは気にして頂けるようになったのかも知れません。

素因数分解、fx-9860GII対応アドイン版です。

管理人様のfx-9860GIIが入院中なのであれですけど、SDKのエミュで動かせるので(^^)

http://pm.matrix.jp/primeFX100.zip

管理人様の素因数分解の実数版と整数版、そして、HP Primeに内蔵されているN番目の素数探索とか、Nより小さい最大素数とか素数関連の関数をちょっとまねて追加してみました。

桁数が多くなると計算時間がどんどん増える(一桁増えるごとに3倍ほどかかる)ようになるので、多桁の素数が暗号に使われるのも納得ですね。

No title

管理人様、こんにちは!

>実機を手にして、どんな感じでしょうか?

デザイン的にはレタリングが見えにくくなることのある表面加工はちょっとマイナスですけど全体的にかなりよというか最高によい印象です。
管理人様がおっしゃるように所有する喜びを感じる完成度の高い一品ですね。
この筐体デザインのままプログラム版が出たとしても全然Okというか、この延長でお願いしたいくらいです(^^)

速度面は前世代機種を使ってないのであまりありがたみを感じないところが残念ですけど、ストレスを感じることの無い操作感は普段使いの電卓として言うこと無しです。
ただひとつ難点というか、電源オフやオートパワーオフで表示されていた数式や数値が綺麗サッパリ消えてしまうのはちょっともったいない感じがしますね。
ちょいメモのつもりで数字、数式とか打ち込んでいたりするので、しばらくすると消えていてがっかりということもあります。
それと表計算とかモード移動で打ち込んだデータが消えてしまうのも惜しいです。
fx-5800Pやグラフ電卓では消えることが無いので、しいて欠点というか惜しいところはそこのところだけですね。
ま、それはスタンダード電卓での縛りとして仕方ないとしても、プログラム電卓バージョンではこのあたりの問題はないでしょうから、fx-5800Pの後継機には超期待が持てます(^^)

>この数字に、海外仕様が入っているのかどうか不明です。文字通りに受け取れば、日本語バージョンが 20万台/年です。

JPシリーズは日本版なので国内だけの数字っぽい感じですよね。
海外では各国対応版がさらに数倍売れるでしょうから、過去最高最強シリーズとなるのは間違いなさそうですね。

>ところで中国は、fx-CG20 CN が新登場で、表示が中国語になっています。最新機種が展開されていますね。

そういえば中国のfx-FD10Proも中文対応してますね。

fx-CG20にしても日本語対応しようと思えば同様に出来るはずなのに未だにされてないので、中国パワーおそるべしです。

数字が違いますね

sentaro様

> fx-JP900 は fx-995ES の倍のメモリを搭載しているようです。カシオのニューリリースによれば、fx-JP900/700/500 は合計で年間2,000万台の生産計画だそうです。

これ、全然違いました。年間20万台の生産でした。1年300日として、日産600台程度。

この数字に、海外仕様が入っているのかどうか不明です。文字通りに受け取れば、日本語バージョンが 20万台/年です。

https://edu.casio.com/

ここを見ると、海外では各国で異なる型式とデザインで展開しているようです。ドイツは、fx-991DE X なんて型式で、デザインは日本と同じ。フランス向けは、fx-92 でサフィックスなし、その色使いはフランス独自のようで、私には馴染まないです。他のヨーロッパの国向けは、北米と同じ型式とデザインのようです。但し、ロシアは最新機種まだのようですね。

北米は、JP900 に相当する fx-991EX のみが太陽電池使用で、他は単四電池仕様。日本は3機種のラインアップですが、あちらでは4機種のラインアップ。

ところで中国は、fx-CG20 CN が新登場で、表示が中国語になっています。最新機種が展開されていますね。
http://www.casio.com.cn/cal/graphic/fx-CG20%20CN/index.html

台湾は、古いものしかないですね。中東、アフリカ、南米と同じ扱いです。台湾は最先端で良い筈なのに、政治上の配慮なんでしょうか?


こうやって、Casio.com から各国語のサイトを見ると面白いですね。

大分脱線していまいました。


Re: No title

sentaro様

> はい!買っちゃいました(笑)

実機を手にして、どんな感じでしょうか?

私は、これまでのカシオ製品にない、所有する喜び、みたいな完成をくすぐられます。筐体とカバーが白ということは、長く使うことを考えれば否定的ですが、デザインとしては評価できます。


> 4千円を切ったあたりからそろそろという感じはあったんですけど、積分と素因数分解の記事への興味と、管理人様のfx-9860GIIの液晶不良でのCASIOサポートの神対応に感動したことがかなり大きな要因です。

やるな~カシオ、ってとこですね。


> 素因数分解は、10桁の最大素数9'999'999'967の素因数分解がfx-9860GIIのアドインで約5秒、つまりJP900でも1分足らずで計算できることになります。
> 積分や総和計算をすれば数十秒かかる計算も普通に起こることなので、素因数分解を桁数を制限して早く終わらせる必要性はあまりないと思われるのですが、高速なJP900で制限がかかっているのがちょっと不思議ですね。
> 10桁精度できっちり素因数分解してこその素因数分解だと思うのでちょっと惜しいです。

冷静な分析、ありがとうございます。私もこの説に説得力を感じます。


> 前機種のCPUは、沖電気の8ビットCPUだったみたいですけど、このCPUから10年で5倍速くなってfx-5800PのCPUと同等以上まで進化した上に超省電力なので今後の展開に期待が持てますね。
>
> http://www.oki.com/jp/otr/index.html
> OKIテクニカルレビュー
> 2005年 No.203
> 超ローパワー8bitマイコンの開発
> http://www.oki.com/jp/Home/JIS/Books/KENKAI/n203/pdf/203_R06.pdf

しっかり読んでみました。分からないことダラケですが、雰囲気は伝わります。

fx-JP900 は fx-995ES の倍のメモリを搭載しているようです。カシオのニューリリースによれば、fx-JP900/700/500 は合計で年間2,000万台の生産計画だそうです。1年300日、1日18時間生産するとして、1秒1台の計算。カシオの電卓生産ラインが自動化されていることは有名ですが、それにしても気合い入ってますね。




No title

管理人様、こんにちは!

>今日は、fx-JP900関連の記事を閲覧されていることが分かって、何だろう?と思っていましたら、買っちゃったのですね fx-JP900...
>これで合点がゆきました。

はい!買っちゃいました(笑)
4千円を切ったあたりからそろそろという感じはあったんですけど、積分と素因数分解の記事への興味と、管理人様のfx-9860GIIの液晶不良でのCASIOサポートの神対応に感動したことがかなり大きな要因です。
そして、やっぱり今回の新シリーズはCASIO初の日本語対応した日本版電卓ですし、CASIOユーザーとしては絶対に買っておくべき製品ですね。
日本語版電卓に関してはHPのPrimeに日本語化の先を越されて日本のメーカーの立場が…!っていう感じだったのですけど、これからのCASIOに期待が持てます(^^)


素因数分解は、10桁の最大素数9'999'999'967の素因数分解がfx-9860GIIのアドインで約5秒、つまりJP900でも1分足らずで計算できることになります。
積分や総和計算をすれば数十秒かかる計算も普通に起こることなので、素因数分解を桁数を制限して早く終わらせる必要性はあまりないと思われるのですが、高速なJP900で制限がかかっているのがちょっと不思議ですね。
10桁精度できっちり素因数分解してこその素因数分解だと思うのでちょっと惜しいです。


>この推論から逆に考えると、fx-JP900 のCPUは、fx-5800P 並の能力を低電圧チップで実現したと言えそうですね。

前機種のCPUは、沖電気の8ビットCPUだったみたいですけど、このCPUから10年で5倍速くなってfx-5800PのCPUと同等以上まで進化した上に超省電力なので今後の展開に期待が持てますね。

http://www.oki.com/jp/otr/index.html
OKIテクニカルレビュー
2005年 No.203
超ローパワー8bitマイコンの開発
http://www.oki.com/jp/Home/JIS/Books/KENKAI/n203/pdf/203_R06.pdf


>カシオは、新しいものを実装する前に、必ず前シリーズの最終モデルにまずは実装してみると言うことが多いので、fx-5800P の後継機への布石かも知れません

と考えると、素因数分解の制限は、今後出てくるであろうプログラム版の上位機種で制限解除されるということなのでしょう(^^)

そして、fx-9860GIIやCG10/20がバージョンアップすれば素因数分解が内蔵機能となる可能性もありますね。

Re: JP900買いました(^^)

sentaro様

今日は、fx-JP900関連の記事を閲覧されていることが分かって、何だろう?と思っていましたら、買っちゃったのですね fx-JP900...

これで合点がゆきました。

さらに、詳細な解析とアドイン作成...恐れ入ります。

確かに、ご指摘頂いた一番単純なシナリオが、かなり納得できるものですね。

この推論から逆に考えると、fx-JP900 のCPUは、fx-5800P 並の能力を低電圧チップで実現したと言えそうですね。

カシオは、新しいものを実装する前に、必ず前シリーズの最終モデルにまずは実装してみると言うことが多いので、fx-5800P の後継機への布石かも知れません。

fx-5800P は発売9年になるので、FX-602Pの製品寿命10年を考え合わせれば、いよいよ...

ワクワクしてきます。

JP900買いました(^^)

fx-995ESの3桁制限とfx-JP900の6桁制限が気になっていろいろ考えてみてましたけど、実機を調べるのが一番ってことで、ついにJP900を買っちゃいました(^^)
ここのところずっと海外版ばかりだったので、久々の日本版電卓です(笑)

第一印象はこの性能でこの価格と、電卓の進化は本当にすごいですね。
スタンダード電卓とはいえ、使い勝手的には変数のXキーが独立したりとなかなかによいです。
これでプログラム機能が付いていればと思うことはありますけど、高速性と高精細な液晶はやはりポイント高いですね。
あと、ACキーを押してオンにならずというのを何度か繰り返してしまいましたけど、表面のエンボス加工?は角度によってはちょっと邪魔ですね(^^;

で、早速、素因数分解を試してみました。
どんな数字でも待たせることなく瞬時に答えが出てくるのはすごいです。
というか、これだけ速いなら計算諦めずにもっと分解桁数増やしてもよさそうなものですけどね(^^;
4桁の素数が二つあるとそこで打ち切りという仕様もなんかもったいない気がします。
9973*997は分解できても、9973*1009はダメというのも微妙なところです。
つまり、997までしか割り算はしてないってことですね。これは6桁までの素因数分解が可能なことと辻褄が合います。
fx-995ESは3桁までしか分解できないので31までの割り算で諦めているとも考えられますが、997*997が分解できるのでこれも997までと考えるのが妥当なところでしょう。

fx-5800Pのプログラムとの計算時間の大幅な違いですけど、
9973*997=9943081をfx-5800P(管理人様の素因数分解プログラム)で48秒かかります。
JP900では0.5秒くらいなので100倍速いということになります。

fx-9860GIIで管理人様の素因数分解プログラムをCの倍精度でアドイン化すると0.05秒くらいです。
これを10倍遅いfx-5800Pにあてはめると0.5秒くらいで結果が出ることになるのでJP900同等になります。

これらの結果から、JP900の内部関数がfx-5800Pのプログラムよりも100倍くらい速いとしても納得できる結論となりました。

ジックリと...

sentaro様

確かに、求められる素因数を桁数で足切りして、それ以上を諦めるロジックだと、諦めるまでが計算時間だから、速くなるというのはありそうですね。

2と奇数で総当たりするロジックは残しつつ、まずはオイラーの式で計算できる素数で、大きいほうから割り算して、運が良くてその素数に当たりが計算あれば、その後の総当たり計算かやかなり速くなる可能性が有りそう....

これが、今考えている作戦です。

No title

なんか勘違いしてたかもです(^^;
上の1~2秒というのは997を素因数分解したときの速度なので…fx-995ESでは一瞬ですね。
fx-995ESの分解可能最大素因数が3桁の997というのと、997の素因数分解とごっちゃになってました。

つまり、997x997=994009の時が一番時間かかるということでしょうか。

もう一度出直します!(^^;

No title

管理人様、こんにちは!

素数の興味深い話題をありがとうございます(^^)

素因数分解はFX-602Pのプログラムライブラリの一番最初にも載っていましたけど、昔からプログラム例としてよく使われていますね。
それが関数電卓のひとつの関数として普通に使えるようになる時代が来るとはちょっとびっくりです。

内蔵機能での速さは整数演算で高速化しているというのもありそうですけど、普通に実数演算で内部最適化しているだけと考えるのが自然でしょうか。
fx-5800Pのプログラムをfx-995ES同等の3桁までで計算を終了とすると、98765432の計算時間は1~2秒程度となってプログラムでの運用でも待つほどの時間はかかりません。
もしかしたら、fx-995ESの1.7秒というのは997を素因数分解した時間と同程度ではないでしょうか?

JP900は6桁まで増やしているので999983まで計算して打ち切っていることになりますけど、3桁の997から比べると10倍以上の計算時間の増加となるので、JP900の速さは管理人様がおっしゃるようにテーブル参照か何か工夫をしていると考えるのがよさそうですね。

とか考えているとだんだんJP900が欲しくなってきました(笑)
最新記事
検索フォーム
最新コメント
カテゴリ
C# (3)
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

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


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

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

なお管理人はカシオ計算機の関係者ではありません。いつでもどこでもプログラミングができるプログラム電卓が好きな1ユーザーです。


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

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

ブロとも申請フォーム

この人とブロともになる

QRコード
QR