ありがとうございます。 たける 2006/05/25 15:59:33 └すいません白石和夫さんの書き込みのとおり... たける 2006/05/25 17:28:27 └白石先生のプログラムで計算できるはずです... 荒田浩二 2006/05/27 10:02:42 └自己RES 荒田浩二 2006/05/27 10:29:26
ありがとうございます。 たける 2006/05/25 15:59:33 ツリーへ
ありがとうございます。 |
返事を書く |
たける 2006/05/25 15:59:33 | |
教えていただきありがとうございます。 あと特に意図はないと思います。ただ単に教授がBASICマニアなだけです。数理科学の授業なのにBASICの授業ばかりで・・・・ これからも質問するときがあると思うのでよろしくお願いします。 |
└すいません白石和夫さんの書き込みのとおり... たける 2006/05/25 17:28:27 ツリーへ
Re: ありがとうございます。 |
返事を書く |
たける 2006/05/25 17:28:27 | |
すいません白石 和夫さんの書き込みのとおりにやってみたのですが、4259でやるとtが出ません。私のやり方が悪いんでしょうか? |
└白石先生のプログラムで計算できるはずです... 荒田浩二 2006/05/27 10:02:42 ツリーへ
Re: すいません白石和夫さんの書き込みのとおり... |
返事を書く |
荒田浩二 2006/05/27 10:02:42 | |
白石先生のプログラムで計算できるはずです。 結果は分母、分子とも 1414桁の分数になります。 実行時間は私のパソコンで6〜13秒かかりました。多少性能の劣るパソコンだと数分かかるかもしれません。実行時間を短くするのであれば、有理数モードではなく十進モードで実行する方法があります。1行目の"OPTION ARITHMETIC RATIONAL"を削除してみてください。結果は小数表現になりますが速いです。 この問題は「自然数の逆数の和は発散するが、特定の数字を含む数を除外した逆数の和は収束する」という性質にヒントを得たものだと思われます。 収束値自体はそれほど大きいわけではない(整数部2桁)のですが、収束が非常に遅い。n=100000000 まで計算しても最初の1桁すら確定しません。 次のようにプログラムを改良してみました。"1"を検索すると、それを"2"にして途中の数の調査をキャンセルしています。n が大きいほど有効です。 質問の内容とはだいぶかけ離れましたが、参考にしていただければ・・・。 OPTION ARITHMETIC RATIONAL LET t=0 INPUT n LET k=1 DO LET p=POS(STR$(k),"1") IF p=0 THEN LET t=t+1/k LET k=k+1 ELSE LET k=k+10^(LEN(STR$(k))-p) ! "1"を"2"にする END IF LOOP UNTIL k>n PRINT t END 上の "LET k=k+10^(LEN(STR$(k))-p)" は、 数学的には "LET k=k+10^INT(LOG10(K)+1-p)" のほうが良いと思いますが、有理数モードでは対数関数が使えないので。 |
└自己RES 荒田浩二 2006/05/27 10:29:26 ツリーへ
Re: 白石先生のプログラムで計算できるはずです... |
返事を書く |
荒田浩二 2006/05/27 10:29:26 | |
自己RES 投稿してから質問者の発信時間を見てみたら、すでに問題は解決していたのですね。 ごめんなさい。私の投稿は見なかったことにしてください。 |