新しく発言する EXIT インデックスへ
ありがとうございます。

  ありがとうございます。 たける 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
投稿してから質問者の発信時間を見てみたら、すでに問題は解決していたのですね。
ごめんなさい。私の投稿は見なかったことにしてください。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。