■ このスレッドは過去ログ倉庫に格納されています
フェルマーの最終定理の証明
- 1 :日高:2020/11/14(土) 09:19:51.37 ID:8XYDkgyN.net
- 【定理】n≧3のとき、x^n+y^n=z^nは自然数解x,y,zを持たない。
【証明】x^n+y^n=z^nを、z=x+rとおいてx^n+y^n=(x+r)^n…(1)とする。
(1)をr^(n-1){(y/r)^n-1}=an{x^(n-1)+…+r^(n-2)x}(1/a)…(2)と変形する。
(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
(2)はa=1以外、r^(n-1)=anのとき、x^n+y^n=(x+(an)^{1/(n-1)})^n…(4)となる。
(3)はrが無理数なので、有理数解を持たない。(4)の解は(3)の解のa^{1/(n-1)}倍となる。
∴n≧3のとき、x^n+y^n=z^nは自然数解x,y,zを持たない。
【定理】n=2のとき、x^n+y^n=z^nは自然数解x,y,zを持つ。
【証明】x^2+y^2=z^2を、z=x+rとおいてx^2+y^2=(x+r)^2…(1)とする。
(1)をr{(y/r)^2-1}=a2x(1/a)…(2)と変形する。
(2)はa=1、r=2のとき、x^2+y^2=(x+2)^2…(3)となる。
(2)はa=1以外、r=a2のとき、x^2+y^2=(x+a2)^2…(4)となる。
(3)はrが有理数なので、有理数解を持つ。(4)の解は(3)の解のa倍となる。
∴n=2のとき、x^n+y^n=z^nは自然数解x,y,zを持つ。
- 787 :132人目の素数さん:2020/11/27(金) 20:01:18.86 ID:1uB++rFT.net
- >>782
> p=3の場合、
> x=s*(ap)^{1/(p-1)},y=t*(ap)^{1/(p-1)},z=(s+1)*(ap)^{1/(p-1)}
> は、解になりません。
>
> それはWilesの証明で示された定理に合わないというだけでおまえの証明では示されていない
>
> 違います。(4)になるからです。
> >779
> p=2だってx=3=(3/2)*2,y=4=(4/2)*2,z=5=(5/2)*2だから
> 2で割れば(4)になるだろ
>
> そうですね。
おまえの証明では(4)になることが解にならない理由だったら
p=2も整数比になる解を持たないことになるだろ
それはおまえの証明で示されることがWilesの証明で示された定理に合わないというだけ
x^2+y^2=z^2=(x+r)^2…(1)のx:y:z=3:4:5になる解はx=(3/2)*r,y=2*r,z=(5/2)*rであり
x=3/2,y=2,z=5/2は(3)の解ではなくて(4)の解なんだよ
- 788 :日高:2020/11/27(金) 20:09:17.32 ID:dGNpgNAA.net
- (修正10)
【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
【証明】x^n+y^n=z^nを、z=x+rとおいてx^n+y^n=(x+r)^n…(1)とする。
(1)をr^(n-1){(y/r)^n-1}=an{x^(n-1)+…+r^(n-2)x}(1/a)…(2)と変形する。
(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
(2)はa=1以外、r^(n-1)=anのとき、x^n+y^n=(x+(an)^{1/(n-1)})^n…(4)となる。
(3)はn=2のとき、x,y,zは整数比となりえる。n>2のとき、x,y,zは整数比とならない。
(4)のx,y,zは(3)のx,y,zのa^{1/(n-1)}倍となる。
∴n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
- 789 :日高:2020/11/27(金) 20:16:27.09 ID:dGNpgNAA.net
- >787
おまえの証明では(4)になることが解にならない理由だったら
p=2も整数比になる解を持たないことになるだろ
それはおまえの証明で示されることがWilesの証明で示された定理に合わないというだけ
x^2+y^2=z^2=(x+r)^2…(1)のx:y:z=3:4:5になる解はx=(3/2)*r,y=2*r,z=(5/2)*rであり
x=3/2,y=2,z=5/2は(3)の解ではなくて(4)の解なんだよ
(3)の解と、(4)の解の比は、同じです。
x^2+y^2=z^2=(x+r)^2…(1)のx:y:z=3:4:5になる解はx=(3/2)*r,y=2*r,z=(5/2)*rであり
x=3/2,y=2,z=5/2は(3)の解ではなくて(4)の解なんだよ
その通りです。
- 790 :132人目の素数さん:2020/11/27(金) 20:16:56.83 ID:ekcxdcxd.net
- 悪霊退散!!!
又読経念仏等のつとめにうるところの功徳を、なんぢしるやいなや。
ただしたをうごかし、こゑをあぐるを、仏事功徳とおもへる、いとはかなし。
仏法に擬するに、うたたとほく、いよいよはるかなり。又経書をひらくことは、
ほとけ、頓漸(とんぜん)修行の儀則を、をしへおけるを、あきらめしり、教の
ごとく修行すればかならず証をとらしめんとなり。いたづらに思量念度をつひや
して、菩提をうる功徳に擬せんとにはあらぬなり。おろかに千万誦の口業をしき
りにして、仏道にいたらんとするは、なほこれながえをきたにして、越にむかは
んとおもはんがごとし。又円孔に方木をいれんとせんとおなじ、文をみながら修
するみちにくらき、それ医方をみる人の合薬をわすれん、なにの益かあらん、口
声をひまなくせる。春の田のかへるの、昼夜になくがごとし、つひに又益なし。」
- 791 :日高:2020/11/27(金) 20:21:01.87 ID:dGNpgNAA.net
- >790
悪霊退散!!!
どういう意味でしょうか?
- 792 :132人目の素数さん:2020/11/27(金) 20:21:07.63 ID:1uB++rFT.net
- >>789
> (3)の解と、(4)の解の比は、同じです。
それがx,y,zは整数比とならない根拠だったらn=2のときx,y,zは整数比とならないだろ
- 793 :132人目の素数さん:2020/11/27(金) 20:23:07.57 ID:ekcxdcxd.net
- 悪霊退散!!!
仁に過ぐれば惰弱になり
義に過ぐれば頑迷になり
礼に過ぐれば追従になり
勇に過ぐれば暴虐になり
智に過ぐれば狡獪になる
- 794 :日高:2020/11/27(金) 20:23:33.87 ID:dGNpgNAA.net
- >792
> (3)の解と、(4)の解の比は、同じです。
それがx,y,zは整数比とならない根拠だったらn=2のときx,y,zは整数比とならないだろ
n=2の場合は、(3)の解は整数比となります。
- 795 :日高:2020/11/27(金) 20:25:11.29 ID:dGNpgNAA.net
- >793
悪霊退散!!!
どういう意味でしょうか?
- 796 :132人目の素数さん:2020/11/27(金) 20:27:01.04 ID:1uB++rFT.net
- >>794
> n=2の場合は、(3)の解は整数比となります。
それは
> (3)の解と、(4)の解の比は、同じです。
とは無関係な別の方法で証明できるからだろ
だからたとえばn=3の場合も
> (3)の解と、(4)の解の比は、同じです。
とは無関係な別の方法で証明しなければならないが
おまえは証明していないだろ
- 797 :132人目の素数さん:2020/11/27(金) 20:28:34.36 ID:W5XuX+oh.net
- >>786 日高
> >784
> ∴n=3のとき、x^n+8y^n=z^nのx,y,zは自然数とならない。
>
> 日高さん、この証明は正しいでしょうか。
>
> 式が違います。
式が同じか違うかを質問したのではありません。
この証明は正しいでしょうか? とお尋ねしています。
考えを述べてください。
(あなたはほかの人に自分の証明が正しいかどうか質問しています。
同じことをあなたに尋ねるものです。)
- 798 :132人目の素数さん:2020/11/27(金) 20:49:55.34 ID:YoZtTjvw.net
- >>716
>(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
>(3)はn=2のとき、x,y,zは整数比となりえる。n>2のとき、x,y,zは整数比とならない。
上の【証明】の記述から判断できることとして,あなたは(3)に有理数解がないことから
[a] (3)に整数比となる解がないことが確定する
同時に(解の比は同じだから)
[b] (4)にも整数比となる解が存在しないことが確定する。
以上の[a][b]を直接に[他の論証を必要とせずに](3)から帰結できると考えているという意味です。
つまり,(3)に「有理数解がない」ことから(3)には「整数比となる解がない」ことが確定し,同時にx^n+y^n=z^nという一般式に「整数比の解がない」ことも必然的に帰結される。
(3)のyが有理数である場合での結論が,x^n*y^n=z^n の解全部についての結論となる。
両者は異なることはない。
「解の比に関して不可分な一体性」といったのは以上の意味ですが,そう理解されているんですよね?
(修正10)ではyが有理数の場合・・・という中間過程も吹っ飛ばして,直接にx,y,zは整数比とならない,となっていますが,それは上の[a][b]から導かれるんですよね?
- 799 :132人目の素数さん:2020/11/27(金) 21:00:45.84 ID:YoZtTjvw.net
- >798の x^n*y^n=z^n は x^n+y^n=z^n の誤りです。
【証明】(修正10)が「yが有理数の場合・・・」という論証の中間過程を省いたので証明の趣旨は逆にわかりやすくなりました。
x^n+y^n=(x+n^{1/(n-1)})^n…(3)
(3)が有理数解を持たないことから,(3)の解x,y,zは整数比とならないという結論が直接導ける。
上の結論が導けることはわざわざ証明の過程を明示するまでもなく一目瞭然である。
そのように理解されているんですよね。
- 800 :132人目の素数さん:2020/11/28(土) 00:02:56.56 ID:wtlDa0yP.net
- a^3=√(b^6+c^6+d^6+2*√(b^3*c^3+b^3*d^3+c^3*d^3))を満たす
整数a,b,c,d,の組み合わせは存在しない
a^3=√(b^6+c^6+d^6+e^6+2*√(b^3*c^3+b^3*d^3+c^3*d^3+a^6*e^6+b^6*e^6+c^6*e^6+d^6*e^6))を満たす
整数a,b,c,d,eの組み合わせは存在しない
- 801 :132人目の素数さん:2020/11/28(土) 01:14:02.02 ID:buCr9xZQ.net
- >>760
> 「x^n +y^n=z^n 」ではなく
> の、「ではなく」とは、どういう意味でしょうか?
x,y,zに関する方程式(3)の満たすべき条件は
「x^n +y^n=z^n」だけではない。
という意味です。
x,y,zに関する方程式(3)の満たすべき条件は
「x^n +y^n=z^n」と「z-x= n^{1/(n-1)}」
の両方である。
ということをご理解、納得いただけましたか?
はい/いいえ でお答えください。
- 802 :132人目の素数さん:2020/11/28(土) 03:51:12.12 ID:80U/4l9f.net
- >>760
> >747
> 「x^n +y^n=z^n 」ではなく
> の、「ではなく」とは、どういう意味でしょうか?
これはないわー
逃げ切る気満々じゃん。
- 803 :132人目の素数さん:2020/11/28(土) 05:28:57.61 ID:YJ1GAhwH.net
- また日高のフニャフニャ回避が始まったわw
- 804 :132人目の素数さん:2020/11/28(土) 05:32:19.64 ID:YJ1GAhwH.net
- 自分の論理が破綻してしまうような質問には、明言を避けまくるw
- 805 :132人目の素数さん:2020/11/28(土) 05:40:41.50 ID:YJ1GAhwH.net
- そういう事から日高は己の論理の穴をちゃんと認識しているという事だな。
それなのに正しいとゴリ押ししてるのだから悪質極まりない。
- 806 :日高:2020/11/28(土) 06:26:14.07 ID:0fpuH75L.net
- (修正10)
【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
【証明】x^n+y^n=z^nを、z=x+rとおいてx^n+y^n=(x+r)^n…(1)とする。
(1)をr^(n-1){(y/r)^n-1}=an{x^(n-1)+…+r^(n-2)x}(1/a)…(2)と変形する。
(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
(2)はa=1以外、r^(n-1)=anのとき、x^n+y^n=(x+(an)^{1/(n-1)})^n…(4)となる。
(3)はn=2のとき、x,y,zは整数比となりえる。n>2のとき、x,y,zは整数比とならない。
(4)のx,y,zは(3)のx,y,zのa^{1/(n-1)}倍となる。
∴n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
- 807 :日高:2020/11/28(土) 06:31:44.82 ID:0fpuH75L.net
- >796
> n=2の場合は、(3)の解は整数比となります。
それは
> (3)の解と、(4)の解の比は、同じです。
とは無関係な別の方法で証明できるからだろ
だからたとえばn=3の場合も
> (3)の解と、(4)の解の比は、同じです。
とは無関係な別の方法で証明しなければならないが
おまえは証明していないだろ
どうして別の方法で証明しなければならないのでしょうか?
- 808 :日高:2020/11/28(土) 06:35:54.42 ID:0fpuH75L.net
- >797
式が同じか違うかを質問したのではありません。
この証明は正しいでしょうか? とお尋ねしています。
考えを述べてください。
式が違うので、自然数解を持ちます。
- 809 :日高:2020/11/28(土) 06:46:56.30 ID:0fpuH75L.net
- >797
式が同じか違うかを質問したのではありません。
この証明は正しいでしょうか? とお尋ねしています。
考えを述べてください。
式が違うので、わかりません。
- 810 :日高:2020/11/28(土) 06:56:12.09 ID:0fpuH75L.net
- >798
「解の比に関して不可分な一体性」といったのは以上の意味ですが,そう理解されているんですよね?
(修正10)ではyが有理数の場合・・・という中間過程も吹っ飛ばして,直接にx,y,zは整数比とならない,となっていますが,それは上の[a][b]から導かれるんですよね?
(3)の、「x,y,zは整数比とならない」は、
(sw)^n+(tw)^n=(uw)^nならば、s^n+t^n=u^nとなる。(s,t,uは有理数、wは無理数)
からです。
- 811 :132人目の素数さん:2020/11/28(土) 07:19:19.57 ID:ymvak4/C.net
- 日高さんが大学教授から返信してもらった内容教えてよ。
教授の名前とか言わなくていいからさ。
まー、もし日高さんの証明もどきが正しく教授に認められていたら、今頃その大学教授と連名で論文出して、ここでこんな事してないだろうけどな。
たぶん社交辞令的な残念メールの文言を日高脳内論理で変換して賞賛されたと思い込んでいる可能性大w
- 812 :132人目の素数さん:2020/11/28(土) 07:23:31.39 ID:g5JRJwZK.net
- >>806
> (修正10)
> 【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
nが自然数でなければ明確に反例が知られている。なので、これは真っ赤な嘘。
そんなことも理解できず、正確な主張すら書けない日高の書いたものは、
全てが誤魔化し。証明とは呼べない。
証明とは、正確な記述と正しい論理に基づく正確な推論の積み重ねでなければならない。
根拠を聞かれても、どのような推論をしたのかを細かく分解して説明出来ないものは証明ではない。
自分が今まで嘘をつき通してきたことが理解できるまで勉強しろ。理解できなければ返信するな。ゴミ。
- 813 :132人目の素数さん:2020/11/28(土) 07:38:16.83 ID:7mUeoanL.net
- >>807
> どうして別の方法で証明しなければならないのでしょうか?
整数比でも整数比でなくても(3)の解とその解をa^{1/(p-1)}倍した
(4)の解の比は同じだろ
p=2のとき
x^2+y^2=(x+2)^2…(3)
y^2=4x+4
2^2*(y/2)^2=(2^2)*(2(x/2)+1)
(y/2)^2=2(x/2)+1
x^2+y^2=(x+√3)^2…(4)
y^2=2√3x+3
√3^2*(y/√3)^2=(√3^2)*(2(x/√3)+1)
(y/√3)^2=2(x/√3)+1
x^2+y^2=(x+1)^2…(4)
y^2=2x+1
(3)と(4)の解の比が同じになることは
(y/2)^2=2(x/2)+1はY^2=2X+1にX=x/2,Y=y/2を代入したもの
(y/√3)^2=2(x/√3)+1はY^2=2X+1にX=x/√3,Y=y/√3を代入したもの
y^2=2x+1はY^2=2X+1にX=x,Y=yを代入したもの
と同じ式Y^2=2X+1で表せることであって
整数比になることはY^2=2X+1のX,Yがともに有理数にできることだから
別に証明しなければならない
s,tは有理数として
x^2+y^2=(x+2)^2…(3)でx=2s,y=2tならt^2=2s+1となって整数比になる
x^2+y^2=(x+1)^2…(4)でx=s,y=tならt^2=2s+1となって整数比になる
この2つはyを有理数としてxが有理数になるかを調べれば良いが
x^2+y^2=(x+√3)^2…(4)でx=s*√3,y=t*√3ならt^2=2s+1となって整数比になる
の場合はyを有理数にしたらt^2=2s+1とはならない(整数比にならない)
よってy=t*√3としてx=s*√3になるかどうかを調べなければならない
p=3のとき
t^2=2s+1ではないが考え方は同じで
x^3+y^3=(x+2)^2…(4)でx=2s,y=2tとできるか?
x^3+y^3=(x+1)^3…(4)でx=s,y=tとできるか?
この2つはyを有理数としてxが有理数になるかを調べれば良いが
x^3+y^3=(x+√3)^3…(3)でx=s*√3,y=t*√3とできるか?
の場合はy=t*√3としてx=s*√3になるかどうかを調べなければならない
- 814 :132人目の素数さん:2020/11/28(土) 07:46:39.29 ID:LpYp+oBb.net
- 悪霊退散!!!
君が行く海辺の宿に霧立たば我が立ち嘆く息と知りませ
- 815 :日高:2020/11/28(土) 08:46:12.52 ID:0fpuH75L.net
- >811
日高さんが大学教授から返信してもらった内容教えてよ。
教授の名前とか言わなくていいからさ。
大学と教授の頭文字を書けば、すぐわかる人です。
内容は、整数比となることと、有理数解をもつことは、違うということでした。
理由は、教えてもらえませんでした。
なので、この部分以外は、正しいということになります。
私は、「整数比となることと、有理数解をもつこと」は、同じだと思います。
- 816 :132人目の素数さん:2020/11/28(土) 08:51:45.33 ID:LpYp+oBb.net
- 悪霊退散!!!
大阪府 70代女性 祖母と母の介護を経験
以前、下半身が麻痺した母と、急激にぼけてしまった祖母とを介護しました。祖母は徘徊し、知らないお宅に上がり込んだり、工場の隅で寝ていたり、
裸で外に出て車を止めたりし、「ごはんを食べていない」と言ってご近所に行ったりしました。昼夜逆転した祖母のために睡眠はとれず、結婚した兄が
一人いましたが、離れたところに住んでいたために誰も助けてくれませんでした。私は自分で何かしようという勇気はありませんでしたが、家族を殺め
てしまうという精神状態は少し理解できます。ある時、祖母を抱っこして夕涼みに出ていたら、知らない人が車を停めて近づいてこられ、
「あなた、幸せになりますよ」
と言われました。白い服を着た中年の男性でした。誰もわかってくれないと思っていた私に、一言声をかけてくださったその方のことが、心の中にずっと
あります。施設を充実させたり、ヘルパーさんを増やしたりすることも必要だと思いますが、周囲の人たちの気持ちも大事だと思います。話を聞いてくれ
る人がいたら、辛い事件は少し減るのではと思います。
- 817 :132人目の素数さん:2020/11/28(土) 08:53:00.60 ID:IDrQM9k5.net
- >>815
大学教授の言うことは間違いで、自分が正しいと思ってるんですね。
なんの根拠もなく。
- 818 :日高:2020/11/28(土) 08:55:19.26 ID:0fpuH75L.net
- >799
x^n+y^n=(x+n^{1/(n-1)})^n…(3)
(3)が有理数解を持たないことから,(3)の解x,y,zは整数比とならないという結論が直接導ける。
上の結論が導けることはわざわざ証明の過程を明示するまでもなく一目瞭然である。
そのように理解されているんですよね。
はい。その通りです。
- 819 :132人目の素数さん:2020/11/28(土) 08:58:04.23 ID:LpYp+oBb.net
- 悪霊退散!!!
procedure Sosu(var intArr :array of Integer);
var
sosuflag:array[word]of boolean; //素数かどうかを判定するフラグ
i,j :Integer;
begin
fillchar(sosuflag,SizeOf(Sosuflag),1);
//まずすべての数を素数と見なしてから後で、割り切れるものをはじく。
i := 2; //素数の最小値
repeat
j := i ; inc(j,i);
while j <= $FFFF do begin
sosuflag[j] := false; //iの倍数なので素数ではない
Inc(J,I);
end;
repeat
Inc(i);
until sosuflag[i]; //次に小さい素数を探す
until i > $8FFF;
j := 1;
for i := 0 to High(IntArr) do begin
repeat
inc(j);
if j > $FFFF then
raise Exception.Create('大きすぎて素数が求められません');
until sosuflag[j];
IntArr[i] := J;
end;
end;
- 820 :132人目の素数さん:2020/11/28(土) 08:59:49.93 ID:LpYp+oBb.net
- 悪霊退散!!!
「フェルマーの定理 日高 迷惑 メール」 でググる。
- 821 :日高:2020/11/28(土) 09:01:26.28 ID:0fpuH75L.net
- >800
a^3=√(b^6+c^6+d^6+2*√(b^3*c^3+b^3*d^3+c^3*d^3))を満たす
整数a,b,c,d,の組み合わせは存在しない
わかりません。
- 822 :132人目の素数さん:2020/11/28(土) 09:04:00.71 ID:LpYp+oBb.net
- 悪霊退散!!!
LET n = 100
DIM s(n)
MAT s = ZER ! 配列 s の全要素に 0(zero) を代入 ※s = 0 ではダメ
LET k = 0
FOR i = 2 TO n
IF s(i) = 0 THEN
PRINT USING "####":i;
LET k = k + 1
IF MOD(k,10) = 0 THEN
PRINT
END IF
FOR j = i^2 TO N STEP i
LET s(j) = 1
NEXT j
END IF
NEXT i
- 823 :日高:2020/11/28(土) 09:04:47.02 ID:0fpuH75L.net
- (修正10)
【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
【証明】x^n+y^n=z^nを、z=x+rとおいてx^n+y^n=(x+r)^n…(1)とする。
(1)をr^(n-1){(y/r)^n-1}=an{x^(n-1)+…+r^(n-2)x}(1/a)…(2)と変形する。
(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
(2)はa=1以外、r^(n-1)=anのとき、x^n+y^n=(x+(an)^{1/(n-1)})^n…(4)となる。
(3)はn=2のとき、x,y,zは整数比となりえる。n>2のとき、x,y,zは整数比とならない。
(4)のx,y,zは(3)のx,y,zのa^{1/(n-1)}倍となる。
∴n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
- 824 :132人目の素数さん:2020/11/28(土) 09:10:01.88 ID:LpYp+oBb.net
- 悪霊退散!!!
REM 既約なピタゴラス数
FUNCTION gcd(a,b)
DO WHILE b <> 0
LET r = MOD(a,b)
LET a = b
LET b = r
LOOP
LET gcd = a
END FUNCTION
LET LAST = 200
REM ピタゴラス数を求める
FOR x = 1 TO LAST
FOR y = x + 1 TO LAST
LET z = SQR(x^2+y^2)
IF INT(z) = z THEN
IF gcd(x,y) = 1 AND gcd(x,z) = 1 AND gcd(y,z) = 1 THEN
PRINT USING "##### ##### #####": x,y,z
END IF
END IF
NEXT y
NEXT x
END
- 825 :日高:2020/11/28(土) 09:11:49.19 ID:0fpuH75L.net
- >801
x,y,zに関する方程式(3)の満たすべき条件は
「x^n +y^n=z^n」だけではない。
という意味です。
「(3)の満たすべき条件」とは、どういう意味でしょうか?
- 826 :132人目の素数さん:2020/11/28(土) 09:13:34.90 ID:LpYp+oBb.net
- 悪霊退散!!!
//2階線形微分方程式( second order differential equation )
procedure TForm1.SLDifEq;
var
i: Integer;
Ex, Ey, h: Extended;
Ev, Et: Extended;
k1, k2, k3, k4: Extended;
m1, m2, m3, m4: Extended;
function DFunc1(t, x, v: Extended):Extended;
begin
Result := CalcEG(EdFuncV.Text, 'v', v);
end;
function DFunc2(t, x, v: Extended):Extended;
begin
Result := CalcEG(EdFuncDV.Text, 'v', v) + CalcEG(EdFuncX.Text, 'x', x)
+ CalcEG(EdFuncT.Text, 't', t);
end;
- 827 :日高:2020/11/28(土) 09:16:02.64 ID:0fpuH75L.net
- >802
> 「x^n +y^n=z^n 」ではなく
> の、「ではなく」とは、どういう意味でしょうか?
これはないわー
逃げ切る気満々じゃん。
違います。逃げ切るつもりは、ありません。
- 828 :日高:2020/11/28(土) 09:20:11.27 ID:0fpuH75L.net
- >803
また日高のフニャフニャ回避が始まったわw
どの部分が、フニャフニャ回避でしょうか?
- 829 :132人目の素数さん:2020/11/28(土) 09:21:50.04 ID:LpYp+oBb.net
- 悪霊退散!!!
begin
with PaintScreen1 do
begin
OffBmp.Canvas.Pen.Width := SubWidth;
OffBmp.Canvas.Pen.Color := TColor($971D4F);
//初期値
h := StrToFloat(Edh.Text);
Et := StrToFloat(Edt0.Text);
Ev := StrToFloat(Edv0.Text);
Ex := StrToFloat(Edx0.Text);
OffBmp.Canvas.MoveTo( RealToDispX(Et),RealToDispY(Ex) );
for i := 0 to 100 do
begin
- 830 :132人目の素数さん:2020/11/28(土) 09:22:24.03 ID:LpYp+oBb.net
- 悪霊退散!!!
//ルンゲ・クッタ
k1 := h*DFunc1(Et, Ex, Ev);
m1 := h*DFunc2(Et, Ex, Ev);
k2 := h*DFunc1(Et+0.5*h, Ex+0.5*k1, Ev+0.5*m1);
m2 := h*DFunc2(Et+0.5*h, Ex+0.5*k1, Ev+0.5*m1);
k3 := h*DFunc1(Et+0.5*h, Ex+0.5*k2, Ev+0.5*m2);
m3 := h*DFunc2(Et+0.5*h, Ex+0.5*k2, Ev+0.5*m2);
k4 := h*DFunc1(Et+h, Ex+k3, Ev+m3);
m4 := h*DFunc2(Et+h, Ex+k3, Ev+m3);
Et := Et + h;
Ex := Ex + (k1 + 2*k2 + 2*k3 + k4)/6;
Ev := Ev + (m1 + 2*m2 + 2*m3 + m4)/6;
OffBmp.Canvas.LineTo( RealToDispX(Et),RealToDispY(Ex) );
end;
- 831 :日高:2020/11/28(土) 09:22:54.98 ID:0fpuH75L.net
- >804
自分の論理が破綻してしまうような質問には、明言を避けまくるw
どの部分が、自分の論理が破綻してしまうような質問でしょうか?
- 832 :132人目の素数さん:2020/11/28(土) 09:23:01.09 ID:LpYp+oBb.net
- 悪霊退散!!!
//初期値
h := StrToFloat(Edh.Text);
Et := StrToFloat(Edt0.Text);
Ev := StrToFloat(Edv0.Text);
Ex := StrToFloat(Edx0.Text);
OffBmp.Canvas.MoveTo( RealToDispX(Et),RealToDispY(Ex) );
for i := 0 to 100 do //負方向の計算
begin
k1 := -h*DFunc1(Et, Ex, Ev);
m1 := -h*DFunc2(Et, Ex, Ev);
k2 := -h*DFunc1(Et+0.5*h, Ex+0.5*k1, Ev+0.5*m1);
m2 := -h*DFunc2(Et+0.5*h, Ex+0.5*k1, Ev+0.5*m1);
k3 := -h*DFunc1(Et+0.5*h, Ex+0.5*k2, Ev+0.5*m2);
m3 := -h*DFunc2(Et+0.5*h, Ex+0.5*k2, Ev+0.5*m2);
k4 := -h*DFunc1(Et+h, Ex+k3, Ev+m3);
m4 := -h*DFunc2(Et+h, Ex+k3, Ev+m3);
Et := Et - h;
Ex := Ex + (k1 + 2*k2 + 2*k3 + k4)/6;
Ev := Ev + (m1 + 2*m2 + 2*m3 + m4)/6;
//横軸変位t 縦軸速度 x
OffBmp.Canvas.LineTo( RealToDispX(Et),RealToDispY(Ex) );
end;
end;
end;
- 833 :日高:2020/11/28(土) 09:25:15.87 ID:0fpuH75L.net
- >805
そういう事から日高は己の論理の穴をちゃんと認識しているという事だな。
どの部分が、己の論理の穴をちゃんと認識していることに、なるのでしょうか?
- 834 :132人目の素数さん:2020/11/28(土) 09:26:25.49 ID:LpYp+oBb.net
- 悪霊退散!!!
procedure fft;
var K,L,KD : Integer ;
wc,ws : Array of Extended ;
procedure fftint ;
var s : Integer ;
wk : Extended ;
begin
For s := 0 to KD-1 do
begin
wk := 2.0 * Pi * s / K ;
wc[s] := Cos(wk) ;
ws[s] := -Sin(wk) ;
end ;
end ;
function bitrev(ip : Integer) : Integer ;
var i,w : Integer ;
begin
w := 0 ;
For I := 1 to L do
begin
w := w * 2 + (ip mod 2) ;
ip := ip div 2 ;
end ;
Result := w ;
end ;
procedure cfft(inv : Integer) ;
var i,j,Li,sn,i0,i1,expon,iw : Integer ;
wk,yr,yi,sign,wwc,wws : Extended ;
- 835 :132人目の素数さん:2020/11/28(土) 09:27:01.68 ID:LpYp+oBb.net
- 悪霊退散!!!
begin
if inv = 1 then sign := 1.0 else sign := -1.0 ;
Li := K ;
iw := 1 ;
For I := 1 to L do
begin
iw := iw * 2 ;
Li := Li div 2 ;
sn := 0 ;
while sn < K-1 do
begin
For J := 0 to Li-1 do
begin
expon := (bitrev(sn) mod iw) * Li ;
wws := sign * ws[expon] ;
wwc := wc[expon] ;
i0 := sn ;
i1 := i0 + Li ;
yr := xr[i1] * wwc - xi[i1] * wws ;
yi := xr[i1] * wws + xi[i1] * wwc ;
xr[i1] := xr[i0] - yr ;
xi[i1] := xi[i0] - yi ;
xr[i0] := xr[i0] + yr ;
xi[i0] := xi[i0] + yi ;
Inc(sn) ;
end ;
Inc(sn,Li) ;
end ;
end ;
- 836 :132人目の素数さん:2020/11/28(土) 09:27:27.58 ID:LpYp+oBb.net
- 悪霊退散!!!
For i := 0 to K-1 do
begin
j := bitrev(i) ;
if inv = 1 then
begin
cr[j] := xr[i] / K ;
ci[j] := xi[i] / K ;
end else
begin
cr[j] := xr[i] ;
ci[j] := xi[i] ;
end ;
end ;
end ;
var
s : Integer ;
begin
//分割数を得る
K := 1024 ; //2^nの形
L := Trunc(log2(K)) ;
KD := K div 2 ;
//データはxr,xiで渡される。
SetLength(wc,KD) ;
SetLength(ws,KD) ;
//手続き呼び出し
fftint ;
//以下で逆高速フーリエ変換ならば引数を-1にすれば大丈夫
cfft(1) ;
end;
- 837 :132人目の素数さん:2020/11/28(土) 09:29:56.61 ID:LpYp+oBb.net
- 悪霊退散!!!
//ガウス・ジョルダン〜Pivot選択あり:逆行列ルーティン付き
function GaussJordanPv(N: Integer):Integer;
var
pRow,pv, k, j: Integer;
mMax,R_pivot, temp: Extended;
begin
//単位行列の設定
for k := 1 to N do
for j := 1 to N do
if k = j then RA[k][j] := 1.0
else RA[k][j] := 0.0;
for pv := 1 to N do //行ループ
begin
mMax := 0.000001;
for k := pv to N do //行ループ 最大値探索
begin
if Abs(A[k][pv]) > mMax then
begin
mMax := Abs(A[k][pv]);
pRow := k;
end;
end;
if mMax <= 0.000001 then //誤差対策
begin
MessageDlg('解が存在しないかまたは不定です!', mtwarning, [mbok], 0);
Result := 0;
Exit;
end;
- 838 :132人目の素数さん:2020/11/28(土) 09:30:39.38 ID:LpYp+oBb.net
- 悪霊退散!!!
//行の入れ替え
if pv <> pRow then
begin
for k := 1 to N+1 do //列ループ
begin
temp := A[pv][k];
A[pv][k] := A[pRow][k];
A[pRow][k] := temp;
end;
for k := 1 to N do //列ループ 単位行列
begin
temp := RA[pv][k];
RA[pv][k] := RA[pRow][k];
RA[pRow][k] := temp;
end;
end;
//ピボット行の処理 ⇒ 対角成分 = 1
R_pivot := 1.0/A[pv][pv];//ピボットの逆数
for j := 1 to N+1 do //列ループ
A[pv][j] := A[pv][j]*R_pivot;
for j := 1 to N do //列ループ 単位行列
RA[pv][j] := RA[pv][j]*R_pivot;
//ピボット行以外の処理 ⇒ ピボット列 = 0
for k := 1 to N do
begin
temp := A[k][pv]; //消去する係数
begin
for j := pv to N+1 do //ピボット列以降を処理
if k <> pv then
A[k][j] := A[k][j] - temp*A[pv][j];
for j := 1 to N do //全列処理(単位行列)
if k <> pv then
RA[k][j] := RA[k][j] - temp*RA[pv][j];
end;
end;
end;
Result := 1;
end;
- 839 :日高:2020/11/28(土) 09:30:40.59 ID:0fpuH75L.net
- >812
nが自然数でなければ明確に反例が知られている。
nが無理数ならば、反例があります。
- 840 :132人目の素数さん:2020/11/28(土) 09:33:10.91 ID:LpYp+oBb.net
- 悪霊退散!!!
function Formalize(var S: String): Boolean;
var
i : Integer;
dmy: String;
begin
Result := False;
if S = '' then Exit; // 空文字はエラー
for i := 1 to Length(S) do // 不正な文字があるとエラー
if not ( S[i] in ['0'..'9', '+', '-', '*', '/',
'(', ')', '.'] ) then Exit;
dmy := S; i := 1;
while i <= Length(S) do
if not ( S[i] in ['(', ')'] ) then Delete(S, i, 1)
else Inc(i);
while Pos('()', S) > 0 do
Delete(S, Pos('()', S), 2);
if Length(S) > 0 then Exit;
S := dmy;
if S[1] in ['+', '-', '*', '/', ')', '.'] then Exit;
if S[Length(S)] in ['+', '-', '*', '/', '(', '.'] then Exit;
for i := 1 to Length(S) - 1 do
begin
if (S[i] in ['+', '-', '*', '/', '.', '(']) and
(S[i+1] in ['+', '-', '*', '/', '.', ')']) then Exit;
end;
for i := 2 to Length(S) - 1 do
if (S[i] = '.') then
if not ((S[i-1] in ['0'..'9']) and (S[i+1] in ['0'..'9'])) then Exit;
Result := True;
end;
- 841 :132人目の素数さん:2020/11/28(土) 09:34:08.30 ID:LpYp+oBb.net
- 悪霊退散!!!
procedure NextToken;
begin
case GNum of
'0'..'9':
GetNumber;
GTOKEN := C_NUMBER;
'+','-':
GOP := GNum;
GTOKEN := C_ADD;
'*','/':
GOP := GNum;
GTOKEN := C_MUL;
'(':
GTOKEN := C_LPAREN;
')':
GTOKEN := C_RPAREN;
')':
GTOKEN := C_RPAREN;
'#':
GTOKEN := C_OTHERS;
end;
if not (GNum in ['0'..'9', '#']) then GNum := ReadChar; // 先読み
end;
- 842 :日高:2020/11/28(土) 09:34:13.71 ID:0fpuH75L.net
- (修正10)
【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
【証明】x^n+y^n=z^nを、z=x+rとおいてx^n+y^n=(x+r)^n…(1)とする。
(1)をr^(n-1){(y/r)^n-1}=an{x^(n-1)+…+r^(n-2)x}(1/a)…(2)と変形する。
(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
(2)はa=1以外、r^(n-1)=anのとき、x^n+y^n=(x+(an)^{1/(n-1)})^n…(4)となる。
(3)はn=2のとき、x,y,zは整数比となりえる。n>2のとき、x,y,zは整数比とならない。
(4)のx,y,zは(3)のx,y,zのa^{1/(n-1)}倍となる。
∴n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
- 843 :132人目の素数さん:2020/11/28(土) 09:35:22.57 ID:LpYp+oBb.net
- 悪霊退散!!!
function Expression: Extended;
var
op : Char
sign: Integer;
u,v : Extended;
begin
u := Term;
while GTOKEN := C_ADD do
begin
op := GOP; // オペレータを保存
NextToken; // '+','-' を読みとばす
v := Term;
if op = '+' then u := u+v
else u := u-v;
end;
Result := u;
end;
function Term: Extended;
var
op: Char;
u,v: Extended;
begin
u := Factor;;
while GTOKEN := C_MUL do
begin
op := GOP; // オペレータを保存
NextToken; // '*','/' を読みとばす
v := Factor;
case op of
'*': u := u*v;
'/': u := u/ v;
else //Error!
end;
end;
Result := u;
end;
- 844 :132人目の素数さん:2020/11/28(土) 09:36:29.99 ID:LpYp+oBb.net
- 悪霊退散!!!
function Factor: Extended;
var
v: Extended;
begin
case GTOKEN of
C_LPAREN: // 左括弧の場合
NextToken; // '(' を読みとばす
v := Expression; // 「式」の処理
if GTOKEN = C_RPAREN then // ')' が来ているはず。チェック
NextToken // ')' を読みとばす
else
ErrorOut;
C_NUMBER: // 数値の場合
v := GVALUE; // 数値の処理をする
NextToken; // 数値を読みとばす
else:
ErrorOut; // "(" でも数値でもなければ、エラー
end;
Result := v;
end;
- 845 :132人目の素数さん:2020/11/28(土) 09:39:14.00 ID:LpYp+oBb.net
- 悪霊退散!!!
int main()
{
int i;
double k, p, dk, kmin, kmax, pmin, pmax;
printf("kmin = "); scanf("%lf", &kmin);
printf("kmax = "); scanf("%lf", &kmax);
printf("pmin = "); scanf("%lf", &pmin);
printf("pmax = "); scanf("%lf", &pmax);
gr_on(); gr_window(kmin, pmin, kmax, pmax, 0, 0);
dk = (kmax - kmin) / (XMAX - 1);
for (k = kmin; k <= kmax; k += dk) {
p = 0.3;
for (i = 1; i <= 50; i++) p += k * p * (1 - p);
for (i = 51; i <= 100; i++) {
if (p >= pmin && p <= pmax)
gr_wdot(k, p, WHITE);
p += k * p * (1 - p);
}
}
hitanykey();
return EXIT_SUCCESS;
}
- 846 :132人目の素数さん:2020/11/28(土) 09:40:20.75 ID:LpYp+oBb.net
- 悪霊退散!!!
#define N 24
#define PI 3.14159265358979323846264
long double latan(long double x) /* アークタンジェント */
{
int i, sgn;
long double a;
if (x > 1) { sgn = 1; x = 1 / x; }
else if (x < -1) { sgn = -1; x = 1 / x; }
else sgn = 0;
a = 0;
for (i = N; i >= 1; i--)
a = (i * i * x * x) / (2 * i + 1 + a);
if (sgn > 0) return PI / 2 - x / (1 + a);
if (sgn < 0) return -PI / 2 - x / (1 + a);
/* else */ return x / (1 + a);
}
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
int main()
{
int i;
long double x, y;
printf(" x %-*s 左のtan\n", LDBL_DIG + 2, "自家製atan");
for (i = -10; i <= 10; i++) {
x = i / 4.0L; y = latan(x);
printf("%5.2Lf %*.*Lf % g\n",
x, LDBL_DIG + 2, LDBL_DIG - 1, y, tan((double)y));
}
return EXIT_SUCCESS;
}
- 847 :132人目の素数さん:2020/11/28(土) 09:41:10.31 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
double gcd(double x, double y) /* 最大公約数 */
{
double t;
while (y != 0) { t = fmod(x, y); x = y; y = t; }
return x;
}
#define N 40
int main()
{
int i, n;
double q, b1, b2, d;
static double t[N + 1];
q = 1;
t[1] = 1;
for (n = 2; n <= N; n++) {
for (i = 1; i < n; i++) t[i - 1] = i * t[i];
t[n - 1] = 0;
for (i = n; i >= 2; i--) t[i] += t[i - 2];
if (n % 2 == 0) {
q *= 4;
b1 = n * t[0]; b2 = q * (q - 1);
if (b1 < 1 / DBL_EPSILON && b2 < 1 / DBL_EPSILON) {
d = gcd(b1, b2); b1 /= d; b2 /= d;
printf("|B(%2d)| = %.0f/%.0f\n", n, b1, b2);
} else
printf("|B(%2d)| = %g\n", n, b1 / b2);
}
}
return EXIT_SUCCESS;
}
- 848 :132人目の素数さん:2020/11/28(土) 09:42:55.51 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <math.h>
#define EPS 1e-10 /* 許容相対誤差 */
#define odd(x) ((x) & 1) /* 奇数? */
#define PI 3.14159265358979324 /* $\pi$ */
#define EULER 0.577215664901532861 /* Eulerの定数 $\gamma$ */
double BesJ(int n, double x) /* $J_n(x)$ */
{
int k;
double a, b, r, s;
const double x_2 = x / 2;
if (x < 0) {
if (odd(n)) return -BesJ(n, -x);
/* else */ return BesJ(n, -x);
}
if (n < 0) {
if (odd(n)) return -BesJ(-n, x);
/* else */ return BesJ(-n, x);
}
if (x == 0) return (n == 0);
a = s = 0; b = 1;
k = n; if (k < x) k = x;
do { k++; } while ((b *= x_2 / k) > EPS);
if (odd(k)) k++; /* 奇数なら偶数にする */
while (k > 0) {
s += b;
a = 2 * k * b / x - a; k--; /* $a = J_k(x)$ */
if (n == k) r = a; /* $k$ 奇数 */
b = 2 * k * a / x - b; k--; /* $b = J_k(x)$ */
if (n == k) r = b; /* $k$ 偶数 */
}
return r / (2 * s + b);
/* $J_0 + 2(J_2 + J_4 + \cdots) = 1$ となるように規格化 */
}
- 849 :132人目の素数さん:2020/11/28(土) 09:43:53.99 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int year, month, day, dayofweek;
static char name[7][10] = {
"Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday" };
printf("Year ? "); scanf("%d", &year);
printf("Month? "); scanf("%d", &month);
printf("Day ? "); scanf("%d", &day);
if (month < 3) { year--; month += 12; }
dayofweek = (year + year / 4 - year / 100 + year / 400
+ (13 * month + 8) / 5 + day) % 7;
printf("It's %s.\n", name[dayofweek]);
return EXIT_SUCCESS;
}
- 850 :132人目の素数さん:2020/11/28(土) 09:45:24.56 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <math.h>
void corrcoef1(int n, float x[], float y[])
{
int i;
float sx, sy, sxx, syy, sxy, dx, dy;
sx = sy = sxx = syy = sxy = 0;
for (i = 0; i < n; i++) {
sx += x[i]; sy += y[i];
}
sx /= n; sy /= n;
for (i = 0; i < n; i++) {
dx = x[i] - sx; dy = y[i] - sy;
sxx += dx * dx; syy += dy * dy; sxy += dx * dy;
}
sxx = sqrt(sxx / (n - 1));
syy = sqrt(syy / (n - 1));
sxy /= (n - 1) * sxx * syy;
printf("標準偏差 %g %g 相関係数 %g\n", sxx, syy, sxy);
}
void corrcoef2(int n, float x[], float y[])
{
int i;
float sx, sy, sxx, syy, sxy;
sx = sy = sxx = syy = sxy = 0;
for (i = 0; i < n; i++) {
sx += x[i]; sy += y[i];
sxx += x[i] * x[i];
syy += y[i] * y[i];
sxy += x[i] * y[i];
}
sx /= n; sxx = (sxx - n * sx * sx) / (n - 1);
sy /= n; syy = (syy - n * sy * sy) / (n - 1);
if (sxx > 0) sxx = sqrt(sxx); else sxx = 0;
if (syy > 0) syy = sqrt(syy); else syy = 0;
sxy = (sxy - n * sx * sy) / ((n - 1) * sxx * syy);
printf("標準偏差 %g %g 相関係数 %g\n", sxx, syy, sxy);
}
- 851 :132人目の素数さん:2020/11/28(土) 09:46:21.82 ID:LpYp+oBb.net
- 悪霊退散!!!
void corrcoef3(int n, float x[], float y[])
{
int i;
float sx, sy, sxx, syy, sxy, dx, dy;
sx = sy = sxx = syy = sxy = 0;
for (i = 0; i < n; i++) {
dx = x[i] - sx; sx += dx / (i + 1);
dy = y[i] - sy; sy += dy / (i + 1);
sxx += i * dx * dx / (i + 1);
syy += i * dy * dy / (i + 1);
sxy += i * dx * dy / (i + 1);
}
sxx = sqrt(sxx / (n - 1));
syy = sqrt(syy / (n - 1));
sxy /= (n - 1) * sxx * syy;
printf("標準偏差 %g %g 相関係数 %g\n", sxx, syy, sxy);
}
- 852 :132人目の素数さん:2020/11/28(土) 09:48:42.35 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <math.h>
#define N 8
static double coef[20] = {
8.333333333333333333333333333e-2, /* 1/12 */
-1.388888888888888888888888889e-3, /* -1/720 */
3.306878306878306878306878307e-5, /* 1/30240 */
-8.267195767195767195767195767e-7, /* -1/1209600 */
2.087675698786809897921009032e-8, /* 1/47900160 */
-5.284190138687493184847682202e-10,
1.338253653068467883282698098e-11,
-3.389680296322582866830195391e-13,
8.586062056277844564135905450e-15,
-2.174868698558061873041516424e-16,
5.509002828360229515202652609e-18,
-1.395446468581252334070768626e-19,
3.534707039629467471693229977e-21,
-8.953517427037546850402611251e-23,
2.267952452337683060310950058e-24,
-5.744790668872202445263829503e-26,
1.455172475614864901866244572e-27,
-3.685994940665310178130050728e-29,
9.336734257095044668660153106e-31,
-2.365022415700629886484029550e-32
};
- 853 :132人目の素数さん:2020/11/28(土) 09:49:07.89 ID:LpYp+oBb.net
- 悪霊退散!!!
double zeta(double x)
{
int i;
double powNx, w, z, zprev;
z = 1;
for (i = 2; i < N; i++) {
zprev = z;
z += pow(i, -x);
if (z == zprev) return z;
}
powNx = pow(N, x);
w = x / (N * powNx);
z += 0.5 / powNx + N / ((x - 1) * powNx) + coef[0] * w;
for (i = 1; i < 20 && z != zprev; i++) {
w *= (x + 2 * i - 1) * (x + 2 * i) / (N * N);
zprev = z;
z += coef[i] * w;
}
return z;
}
- 854 :132人目の素数さん:2020/11/28(土) 09:50:28.37 ID:LpYp+oBb.net
- 悪霊退散!!!
unsigned phi(unsigned x)
{
unsigned d, t;
t = x;
if (x % 2 == 0) {
t /= 2;
do { x /= 2; } while (x % 2 == 0);
}
d = 3;
while (x / d >= d) {
if (x % d == 0) {
t = t / d * (d - 1);
do { x /= d; } while (x % d == 0);
}
d += 2;
}
if (x > 1) t = t / x * (x - 1);
return t;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
printf("オイラーの関数 φ(1),…,φ(200)\n ");
for (j = 1; j <= 10; j++) printf(" +%2d", j);
printf("\n ");
for (j = 1; j <= 10; j++) printf("-----");
printf("\n");
for (i = 0; i < 20; i++) {
printf("%3d |", 10 * i);
for (j = 1; j <= 10; j++) printf("%5d", phi(10 * i + j));
printf("\n");
}
return EXIT_SUCCESS;
}
- 855 :132人目の素数さん:2020/11/28(土) 09:51:43.33 ID:LpYp+oBb.net
- 悪霊退散!!!
#define N 5
double x[N] = { 0, 10, 20, 30, 40 },
y[N] = { 610.66, 1227.4, 2338.1, 4244.9, 7381.2 },
z[N];
void maketable(double x[], double y[], double z[])
{
int i;
double t;
static double h[N], d[N];
z[0] = 0; z[N - 1] = 0; /* 両端点での y''(x) / 6 */
for (i = 0; i < N - 1; i++) {
h[i ] = x[i + 1] - x[i];
d[i + 1] = (y[i + 1] - y[i]) / h[i];
}
z[1] = d[2] - d[1] - h[0] * z[0];
d[1] = 2 * (x[2] - x[0]);
for (i = 1; i < N - 2; i++) {
t = h[i] / d[i];
z[i + 1] = d[i + 2] - d[i + 1] - z[i] * t;
d[i + 1] = 2 * (x[i + 2] - x[i]) - h[i] * t;
}
z[N - 2] -= h[N - 2] * z[N - 1];
for (i = N - 2; i > 0; i--)
z[i] = (z[i] - h[i] * z[i + 1]) / d[i];
}
- 856 :132人目の素数さん:2020/11/28(土) 09:52:13.86 ID:LpYp+oBb.net
- 悪霊退散!!!
double spline(double t, double x[], double y[], double z[])
{
int i, j, k;
double d, h;
i = 0; j = N - 1;
while (i < j) {
k = (i + j) / 2;
if (x[k] < t) i = k + 1; else j = k;
}
if (i > 0) i--;
h = x[i + 1] - x[i]; d = t - x[i];
return (((z[i + 1] - z[i]) * d / h + z[i] * 3) * d
+ ((y[i + 1] - y[i]) / h
- (z[i] * 2 + z[i + 1]) * h)) * d + y[i];
}
- 857 :132人目の素数さん:2020/11/28(土) 09:53:24.39 ID:LpYp+oBb.net
- 悪霊退散!!!
#define TEST 1
#if TEST
int count = 0;
#endif
int A(int x, int y)
{
#if TEST
count++;
#endif
if (x == 0) return y + 1;
if (y == 0) return A(x - 1, 1);
return A(x - 1, A(x, y - 1));
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("A(3, 3) = %d\n", A(3, 3));
#if TEST
printf("A(x, y) は %d 回呼び出されました.\n", count);
#endif
return EXIT_SUCCESS;
}
- 858 :132人目の素数さん:2020/11/28(土) 09:55:52.58 ID:LpYp+oBb.net
- 悪霊退散!!!
static void output(int bit) /* {\tt bit} に続いてその補数を {\tt ns} 個出力 */
{
putbit(bit); /* 1ビット書き出す */
while (ns > 0) { putbit(! bit); ns--; } /* その補数を書き出す */
}
void encode(void) /* 圧縮 */
{
int c;
unsigned long range, maxcount, incount, cr, d;
unsigned short low, high;
static unsigned long count[N];
for (c = 0; c < N; c++) count[c] = 0; /* 頻度の初期化 */
while ((c = getc(infile)) != EOF) count[c]++; /* 各文字の頻度 */
incount = 0; maxcount = 0; /* 原文の大きさ, 頻度の最大値 */
for (c = 0; c < N; c++) {
incount += count[c];
if (count[c] > maxcount) maxcount = count[c];
}
if (incount == 0) return; /* 0バイトのファイル */
/* 頻度合計が {\tt Q1} 未満, 各頻度が1バイトに収まるよう規格化 */
d = max((maxcount + N - 2) / (N - 1),
(incount + Q1 - 257) / (Q1 - 256));
if (d != 1)
for (c = 0; c < N; c++)
count[c] = (count[c] + d - 1) / d;
cum[0] = 0;
for (c = 0; c < N; c++) {
fputc((int)count[c], outfile); /* 頻度表の出力 */
cum[c + 1] = cum[c] + (unsigned)count[c]; /* 累積頻度 */
}
- 859 :132人目の素数さん:2020/11/28(土) 09:56:31.59 ID:LpYp+oBb.net
- 悪霊退散!!!
outcount = N;
rewind(infile); incount = 0; /* 巻き戻して再走査 */
low = 0; high = USHRT_MAX; ns = 0;
while ((c = getc(infile)) != EOF) { /* 各文字を符号化 */
range = (unsigned long)(high - low) + 1;
high = (unsigned short)
(low + (range * cum[c + 1]) / cum[N] - 1);
low = (unsigned short)
(low + (range * cum[c ]) / cum[N]);
for ( ; ; ) {
if (high < Q2) output(0);
else if (low >= Q2) output(1);
else if (low >= Q1 && high < Q3) {
ns++; low -= Q1; high -= Q1;
} else break;
low <<= 1; high = (high << 1) + 1;
}
if ((++incount & 1023) == 0) printf("%12lu\r", incount);
}
- 860 :132人目の素数さん:2020/11/28(土) 09:57:10.88 ID:LpYp+oBb.net
- 悪霊退散!!!
int binarysearch(unsigned x) /* $\mbox{\tt cum[i]} \le x < \mbox{\tt cum[i+1]}$ となる {\tt i} を二分探索で求める */
{
int i, j, k;
i = 1; j = N;
while (i < j) {
k = (i + j) / 2;
if (cum[k] <= x) i = k + 1; else j = k;
}
return i - 1;
}
- 861 :132人目の素数さん:2020/11/28(土) 09:57:37.15 ID:LpYp+oBb.net
- 悪霊退散!!!
void decode(unsigned long size) /* 復元 */
{
int c;
unsigned char count[N];
unsigned short low, high, value;
unsigned long i, range;
if (size == 0) return; /* 0バイトのファイル */
cum[0] = 0;
for (c = 0; c < N; c++) {
count[c] = fgetc(infile); /* 頻度分布を読む */
cum[c + 1] = cum[c] + count[c]; /* 累積頻度を求める */
}
value = 0;
for (c = 0; c < USHRT_BIT; c++)
value = 2 * value + getbit(); /* バッファを満たす */
low = 0; high = USHRT_MAX;
for (i = 0; i < size; i++) { /* 各文字を復元する */
range = (unsigned long)(high - low) + 1;
c = binarysearch((unsigned)((((unsigned long)
(value - low) + 1) * cum[N] - 1) / range));
high = (unsigned short)
(low + (range * cum[c + 1]) / cum[N] - 1);
low = (unsigned short)
(low + (range * cum[c ]) / cum[N]);
for ( ; ; ) {
if (high < Q2) { /* 何もしない */ }
else if (low >= Q2) { /* 何もしない */ }
else if (low >= Q1 && high < Q3) {
value -= Q1; low -= Q1; high -= Q1;
} else break;
low <<= 1; high = (high << 1) + 1;
value = (value << 1) + getbit(); /* 1ビット読む */
}
putc(c, outfile); /* 復元した文字を書き出す */
if ((i & 1023) == 0) printf("%12lu\r", i);
}
printf("%12lu\n", size); /* 原文のバイト数 */
}
- 862 :132人目の素数さん:2020/11/28(土) 10:07:04.52 ID:LpYp+oBb.net
- 悪霊退散!!!
int change(int n, int k) /* 再帰版 */
{
int s;
if (n < 0) return 0;
s = 1 + n / 5 + change(n - 10, 10);
if (k >= 50) s += change(n - 50, 50);
if (k >= 100) s += change(n - 100, 100);
return s;
}
int change1(int n) /* 非再帰版 */
{
int i, j, s, t, u;
s = 0;
for (i = n / 100; i >= 0; i--) { /* 100円玉 */
t = n - 100 * i;
for (j = t / 50; j >= 0; j--) { /* 50円玉 */
u = t - 50 * j;
s += (1 + u / 5 - u / 10) * (1 + u / 10);
}
}
return s;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
printf("お金の払い方\n");
printf(" 金額 再帰版 非再帰版\n");
for (i = 0; i <= 500; i += 5)
printf("%6d %8d %8d\n", i, change(i, i), change1(i));
return EXIT_SUCCESS;
}
- 863 :132人目の素数さん:2020/11/28(土) 10:08:41.83 ID:LpYp+oBb.net
- #include <math.h>
#define PI 3.14159265358979323846264
double p_nor(double z) /* 正規分布の下側累積確率 */
{
int i;
double z2, prev, p, t;
z2 = z * z;
t = p = z * exp(-0.5 * z2) / sqrt(2 * PI);
for (i = 3; i < 200; i += 2) {
prev = p; t *= z2 / i; p += t;
if (p == prev) return 0.5 + p;
}
return (z > 0);
}
double q_nor(double z) /* 正規分布の上側累積確率 */
{
return 1 - p_nor(z);
}
double q_chi2(int df, double chi2) /* 上側累積確率 */
{
int k;
double s, t, chi;
if (df & 1) { /* 自由度が奇数 */
chi = sqrt(chi2);
if (df == 1) return 2 * q_nor(chi);
s = t = chi * exp(-0.5 * chi2) / sqrt(2 * PI);
for (k = 3; k < df; k += 2) {
t *= chi2 / k; s += t;
}
return 2 * (q_nor(chi) + s);
} else { /* 自由度が偶数 */
s = t = exp(-0.5 * chi2);
for (k = 2; k < df; k += 2) {
t *= chi2 / k; s += t;
}
return s;
}
}
double p_chi2(int df, double chi2) /* 下側累積確率 */
{
return 1 - q_chi2(df, chi2);
}
- 864 :132人目の素数さん:2020/11/28(土) 10:09:51.79 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <math.h>
#define EULER 0.577215664901532860606512090082 /* Eulerの定数 $\gamma$ */
static double Ci_series(double x) /* 級数展開 */
{
int k;
double s, t, u;
s = EULER + log(x);
x = - x * x; t = 1;
for (k = 2; k < 1000; k += 2) {
t *= x / ((k - 1) * k);
u = s; s += t / k;
if (s == u) return s;
}
printf("Si_series(): 収束しません.\n");
return s;
}
double Ci_asympt(double x) /* 漸近展開 */
{
int k, flag;
double t, f, g, fmax, fmin, gmax, gmin;
fmax = gmax = 2; fmin = gmin = 0;
f = g = 0; t = 1 / x;
k = flag = 0;
while (flag != 15) {
f += t; t *= ++k / x;
if (f < fmax) fmax = f; else flag |= 1;
g += t; t *= ++k / x;
if (g < gmax) gmax = g; else flag |= 2;
f -= t; t *= ++k / x;
if (f > fmin) fmin = f; else flag |= 4;
g -= t; t *= ++k / x;
if (g > gmin) gmin = g; else flag |= 8;
}
return 0.5 * ((fmax + fmin) * sin(x)
- (gmax + gmin) * cos(x));
}
double Ci(double x)
{
if (x < 0) return -Ci(-x);
if (x < 18) return Ci_series(x);
return Ci_asympt(x);
}
- 865 :132人目の素数さん:2020/11/28(土) 10:10:55.27 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define LIMIT ((ULONG_MAX - 1) / 3)
int main()
{
unsigned long n;
printf("n = "); scanf("%lu", &n);
while (n > 1) {
if (n & 1) { /* 奇数 */
if (n > LIMIT) {
printf("\nOverflow\n"); return 1;
} else n = 3 * n + 1;
} else n /= 2;
printf(" %lu", n);
}
printf("\n");
return EXIT_SUCCESS;
}
- 866 :132人目の素数さん:2020/11/28(土) 10:11:57.73 ID:LpYp+oBb.net
- 悪霊退散!!!
int comb(int n, int k)
{
if (k == 0 || k == n) return 1;
/* if (k == 1) return n; */
return comb(n - 1, k - 1) + comb(n - 1, k);
}
unsigned long combination(int n, int k)
{
int i, j;
unsigned long a[17];
if (n - k < k) k = n - k;
if (k == 0) return 1;
if (k == 1) return n;
if (k > 17) return 0; /* error */
for (i = 1; i < k; i++) a[i] = i + 2;
for (i = 3; i <= n - k + 1; i++) {
a[0] = i;
for (j = 1; j < k; j++) a[j] += a[j - 1];
}
return a[k - 1];
}
- 867 :132人目の素数さん:2020/11/28(土) 10:13:43.71 ID:LpYp+oBb.net
- #define SCALAR double
#include "matutil.c"
#include <math.h>
double lu(int n, matrix a, int *ip) /* LU分解 */
{
int i, j, k, ii, ik;
double t, u, det;
vector weight;
weight = new_vector(n); /* {\tt weight[0..n-1]} の記憶領域確保 */
det = 0; /* 行列式 */
for (k = 0; k < n; k++) { /* 各行について */
ip[k] = k; /* 行交換情報の初期値 */
u = 0; /* その行の絶対値最大の要素を求める */
for (j = 0; j < n; j++) {
t = fabs(a[k][j]); if (t > u) u = t;
}
if (u == 0) goto EXIT; /* 0 なら行列はLU分解できない */
weight[k] = 1 / u; /* 最大絶対値の逆数 */
}
det = 1; /* 行列式の初期値 */
for (k = 0; k < n; k++) { /* 各行について */
u = -1;
for (i = k; i < n; i++) { /* より下の各行について */
ii = ip[i]; /* 重み×絶対値 が最大の行を見つける */
t = fabs(a[ii][k]) * weight[ii];
if (t > u) { u = t; j = i; }
}
ik = ip[j];
if (j != k) {
ip[j] = ip[k]; ip[k] = ik; /* 行番号を交換 */
det = -det; /* 行を交換すれば行列式の符号が変わる */
}
u = a[ik][k]; det *= u; /* 対角成分 */
if (u == 0) goto EXIT; /* 0 なら行列はLU分解できない */
for (i = k + 1; i < n; i++) { /* Gauss消去法 */
ii = ip[i];
t = (a[ii][k] /= u);
for (j = k + 1; j < n; j++)
a[ii][j] -= t * a[ik][j];
}
}
EXIT:
free_vector(weight); /* 記憶領域を解放 */
return det; /* 戻り値は行列式 */
}
- 868 :132人目の素数さん:2020/11/28(土) 10:14:24.10 ID:LpYp+oBb.net
- 悪霊退散!!!
double matinv(int n, matrix a, matrix a_inv)
{
int i, j, k, ii;
double t, det;
int *ip; /* 行交換の情報 */
ip = malloc(sizeof(int) * n);
if (ip == NULL) error("記憶領域不足");
det = lu(n, a, ip);
if (det != 0)
for (k = 0; k < n; k++) {
for (i = 0; i < n; i++) {
ii = ip[i]; t = (ii == k);
for (j = 0; j < i; j++)
t -= a[ii][j] * a_inv[j][k];
a_inv[i][k] = t;
}
for (i = n - 1; i >= 0; i--) {
t = a_inv[i][k]; ii = ip[i];
for (j = i + 1; j < n; j++)
t -= a[ii][j] * a_inv[j][k];
a_inv[i][k] = t / a[ii][i];
}
}
free(ip);
return det;
}
double infinity_norm(int n, matrix a) /* ∞ノルム */
{
int i, j;
double rowsum, max;
max = 0;
for (i = 0; i < n; i++) {
rowsum = 0;
for (j = 0; j < n; j++) rowsum += fabs(a[i][j]);
if (rowsum > max) max = rowsum;
}
return max;
}
- 869 :132人目の素数さん:2020/11/28(土) 10:43:01.09 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
enum {FALSE, TRUE};
#define N 10 /* 最大の行数 */
int imax, jmax, solution,
word[N][128], digit[256], low[256], ok[10];
void found(void) /* 解の表示 */
{
int i, j, c;
printf("\n解 %d\n", ++solution);
for (i = 0; i <= imax; i++) {
for (j = jmax; j >= 0; j--) {
c = word[i][j];
if (c != '\0') printf("%d", digit[c]);
else printf(" ");
}
printf("\n");
}
}
- 870 :132人目の素数さん:2020/11/28(土) 10:43:37.17 ID:LpYp+oBb.net
- 悪霊退散!!!
void try(int sum) /* 再帰的に試みる */
{
static int i = 0, j = 0, carry;
int c, d;
c = word[i][j];
if (i < imax) {
i++;
if ((d = digit[c]) < 0) { /* 定まっていないなら */
for (d = low[c]; d <= 9; d++)
if (ok[d]) {
digit[c] = d; ok[d] = FALSE;
try(sum + d); ok[d] = TRUE;
}
digit[c] = -1;
} else try(sum + d);
i--;
} else {
j++; i = 0; d = sum % 10; carry = sum / 10;
if (digit[c] == d) {
if (j <= jmax) try(carry);
else if (carry == 0) found();
} else if (digit[c] < 0 && ok[d] && d >= low[c]) {
digit[c] = d; ok[d] = FALSE;
if (j <= jmax) try(carry);
else if (carry == 0) found();
digit[c] = -1; ok[d] = TRUE;
}
j--; i = imax;
}
}
- 871 :132人目の素数さん:2020/11/28(土) 10:44:57.61 ID:LpYp+oBb.net
- 悪霊退散!!!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
enum {FALSE, TRUE};
#define N 10 /* 最大の行数 */
int imax, jmax, solution,
word[N][128], digit[256], low[256], ok[10];
void found(void) /* 解の表示 */
{
int i, j, c;
printf("\n解 %d\n", ++solution);
for (i = 0; i <= imax; i++) {
for (j = jmax; j >= 0; j--) {
c = word[i][j];
if (c != '\0') printf("%d", digit[c]);
else printf(" ");
}
printf("\n");
}
}
#include <math.h>
#define PI 3.14159265358979324 /* $\pi$ */
#define LOG_2PI 1.83787706640934548 /* $\log 2\pi$ */
#define N 8
#define B0 1 /* 以下はBernoulli数 */
#define B1 (-1.0 / 2.0)
#define B2 ( 1.0 / 6.0)
#define B4 (-1.0 / 30.0)
#define B6 ( 1.0 / 42.0)
#define B8 (-1.0 / 30.0)
#define B10 ( 5.0 / 66.0)
#define B12 (-691.0 / 2730.0)
#define B14 ( 7.0 / 6.0)
#define B16 (-3617.0 / 510.0)
double loggamma(double x) /* ガンマ関数の対数 */
{
double v, w;
v = 1;
while (x < N) { v *= x; x++; }
w = 1 / (x * x);
return ((((((((B16 / (16 * 15)) * w + (B14 / (14 * 13))) * w
+ (B12 / (12 * 11))) * w + (B10 / (10 * 9))) * w
+ (B8 / ( 8 * 7))) * w + (B6 / ( 6 * 5))) * w
+ (B4 / ( 4 * 3))) * w + (B2 / ( 2 * 1))) / x
+ 0.5 * LOG_2PI - log(v) - x + (x - 0.5) * log(x);
}
- 872 :132人目の素数さん:2020/11/28(土) 10:45:32.09 ID:LpYp+oBb.net
- 悪霊退散!!!
double gamma(double x) /* ガンマ関数 */
{
if (x < 0)
return PI / (sin(PI * x) * exp(loggamma(1 - x)));
return exp(loggamma(x));
}
double beta(double x, double y) /* ベータ関数 */
{
return exp(loggamma(x) + loggamma(y) - loggamma(x + y));
}
- 873 :132人目の素数さん:2020/11/28(土) 10:47:04.37 ID:LpYp+oBb.net
- 悪霊退散!!!
#include "matutil.c"
void gauss5(int n, vector diag, vector sub1, vector sub2,
vector sup1, vector sup2, vector b)
{
int i;
double t;
for (i = 0; i < n - 2; i++) { /* 消去法 */
t = sub1[i] / diag[i];
diag[i + 1] -= t * sup1[i];
sup1[i + 1] -= t * sup2[i];
b [i + 1] -= t * b [i];
t = sub2[i] / diag[i];
sub1[i + 1] -= t * sup1[i];
diag[i + 2] -= t * sup2[i];
b [i + 2] -= t * b [i];
}
t = sub1[n - 2] / diag[n - 2];
diag[n - 1] -= t * sup1[n - 2];
b [n - 1] -= t * b [n - 2];
b[n - 1] /= diag[n - 1]; /* 後退代入 */
b[n - 2] = (b[n - 2] - sup1[n - 2] * b[n - 1]) / diag[n - 2];
for (i = n - 3; i >= 0; i--)
b[i] = (b[i] - sup1[i] * b[i + 1]
- sup2[i] * b[i + 2]) / diag[i];
}
- 874 :132人目の素数さん:2020/11/28(土) 10:48:46.51 ID:LpYp+oBb.net
- #include <math.h>
double goldsect(double a, double b,
double tolerance, double (*f)(double x))
{
const double r = 2 / (3 + sqrt(5));
double c, d, fc, fd, t;
if (a > b) { t = a; a = b; b = t; }
t = r * (b - a); c = a + t; d = b - t;
fc = f(c); fd = f(d);
for ( ; ; ) {
if (fc > fd) {
a = c; c = d; fc = fd; d = b - r * (b - a);
if (d - c <= tolerance) return c;
fd = f(d);
} else {
b = d; d = c; fd = fc; c = a + r * (b - a);
if (d - c <= tolerance) return d;
fc = f(c);
}
}
}
#include <stdio.h>
#include <stdlib.h>
#define TEST 1
double func(double x) /* 最小化する関数 */
{
static int count = 0;
const double xmin = 0.314;
double value;
value = (x - xmin) * (x - xmin);
#if TEST
printf("%4d: f(%g) = %g\n", ++count, x, value);
#endif
return value;
}
- 875 :132人目の素数さん:2020/11/28(土) 10:50:06.99 ID:LpYp+oBb.net
- #include "bitio.c" /* ビット入出力 */
#define N 256 /* 文字の種類 */
#define CHARBITS 8 /* 1バイトのビット数 */
int heapsize, heap[2*N-1], /* 優先待ち行列用ヒープ */
parent[2*N-1], left[2*N-1], right[2*N-1]; /* Huffman木 */
unsigned long int freq[2*N-1]; /* 各文字の出現頻度 */
static void downheap(int i) /* 優先待ち行列に挿入 */
{
int j, k;
k = heap[i];
while ((j = 2 * i) <= heapsize) {
if (j < heapsize && freq[heap[j]] > freq[heap[j + 1]])
j++;
if (freq[k] <= freq[heap[j]]) break;
heap[i] = heap[j]; i = j;
}
heap[i] = k;
}
void writetree(int i) /* 枝を出力 */
{
if (i < N) { /* 葉 */
putbit(0);
putbits(CHARBITS, i); /* 文字そのもの */
} else { /* 節 */
putbit(1);
writetree(left[i]); writetree(right[i]); /* 左右の枝 */
}
}
- 876 :132人目の素数さん:2020/11/28(土) 10:55:02.73 ID:LpYp+oBb.net
- 悪霊退散!!!
#include "bitio.c" /* ビット入出力 */
#define N 256 /* 文字の種類 */
#define CHARBITS 8 /* 1バイトのビット数 */
int heapsize, heap[2*N-1], /* 優先待ち行列用ヒープ */
parent[2*N-1], left[2*N-1], right[2*N-1]; /* Huffman木 */
unsigned long int freq[2*N-1]; /* 各文字の出現頻度 */
static void downheap(int i) /* 優先待ち行列に挿入 */
{
int j, k;
k = heap[i];
while ((j = 2 * i) <= heapsize) {
if (j < heapsize && freq[heap[j]] > freq[heap[j + 1]])
j++;
if (freq[k] <= freq[heap[j]]) break;
heap[i] = heap[j]; i = j;
}
heap[i] = k;
}
void writetree(int i) /* 枝を出力 */
{
if (i < N) { /* 葉 */
putbit(0);
putbits(CHARBITS, i); /* 文字そのもの */
} else { /* 節 */
putbit(1);
writetree(left[i]); writetree(right[i]); /* 左右の枝 */
}
}
- 877 :132人目の素数さん:2020/11/28(土) 10:57:30.57 ID:LpYp+oBb.net
- 悪霊退散!!!
void encode(void) /* 圧縮 */
{
int i, j, k, avail, tablesize;
unsigned long int incount, cr;
static char codebit[N]; /* 符号語 */
for (i = 0; i < N; i++) freq[i] = 0;
while ((i = getc(infile)) != EOF) freq[i]++;
heap[1] = 0; /* 長さ0のファイルに備える */
heapsize = 0;
for (i = 0; i < N; i++)
if (freq[i] != 0) heap[++heapsize] = i;
for (i = heapsize / 2; i >= 1; i--) downheap(i);
for (i = 0; i < 2 * N - 1; i++) parent[i] = 0; /* 念のため */
k = heap[1]; /
avail = N; /* 以下のループでハフマン木を作る */
while (heapsize > 1) {
i = heap[1];
heap[1] = heap[heapsize--]; downheap(1);
j = heap[1];
k = avail++;
freq[k] = freq[i] + freq[j];
heap[1] = k; downheap(1);
parent[i] = k; parent[j] = -k;
left[k] = i; right[k] = j; /* 〃 */
}
writetree(k);
tablesize = (int) outcount;
incount = 0; rewind(infile);
while ((j = getc(infile)) != EOF) {
k = 0;
while ((j = parent[j]) != 0)
if (j > 0) codebit[k++] = 0;
else { codebit[k++] = 1; j = -j; }
while (--k >= 0) putbit(codebit[k]);
if ((++incount & 1023) == 0)
printf("%12lu\r", incount);
}
putbits(7, 0);
printf("In : %lu bytes\n", incount);
printf("Out: %lu bytes (table: %d bytes)\n",
outcount, tablesize);
if (incount != 0) {
cr = (1000 * outcount + incount / 2) / incount;
printf("Out/In: %lu.%03lu\n", cr / 1000, cr % 1000);
}
}
- 878 :日高:2020/11/28(土) 11:06:56.72 ID:0fpuH75L.net
- >877
悪霊退散!!!
どういう意味でしょうか?
- 879 :132人目の素数さん:2020/11/28(土) 11:12:14.24 ID:KJCRmjGK.net
- >>825
> x,y,zに関する方程式(3)の満たすべき条件は
「x^n +y^n=z^n」だけではない。
という意味です。
>「(3)の満たすべき条件」とは、どういう意味でしょうか?
「方程式」とは、変数が特定の値をとるときに成り立つ等式のことです。
x,y,zを変数とする方程式(3)において
変数(x,y,z)が満たすべき等式は
「x^n +y^n=z^n」と「z-x= n^{1/(n-1)}」
の両方である。
ということです。
ご理解、納得いただけましたか?
はい/いいえ でお答えください。
- 880 :日高:2020/11/28(土) 11:26:01.62 ID:0fpuH75L.net
- >879
x,y,zを変数とする方程式(3)において
変数(x,y,z)が満たすべき等式は
「x^n +y^n=z^n」と「z-x= n^{1/(n-1)}」
の両方である。
ということです。
ご理解、納得いただけましたか?
はい/いいえ でお答えください。
はい。
- 881 :日高:2020/11/28(土) 11:28:56.18 ID:0fpuH75L.net
- (修正10)
【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
【証明】x^n+y^n=z^nを、z=x+rとおいてx^n+y^n=(x+r)^n…(1)とする。
(1)をr^(n-1){(y/r)^n-1}=an{x^(n-1)+…+r^(n-2)x}(1/a)…(2)と変形する。
(2)はa=1、r^(n-1)=nのとき、x^n+y^n=(x+n^{1/(n-1)})^n…(3)となる。
(2)はa=1以外、r^(n-1)=anのとき、x^n+y^n=(x+(an)^{1/(n-1)})^n…(4)となる。
(3)はn=2のとき、x,y,zは整数比となりえる。n>2のとき、x,y,zは整数比とならない。
(4)のx,y,zは(3)のx,y,zのa^{1/(n-1)}倍となる。
∴n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
- 882 :132人目の素数さん:2020/11/28(土) 11:34:59.10 ID:g5JRJwZK.net
- >>839
> >812
> nが自然数でなければ明確に反例が知られている。
>
> nが無理数ならば、反例があります。
オマエがそれを知っていようがいまいが、書かれていることが不正確で嘘八百だと書いただけだ。
> 【定理】n>2のとき、x^n+y^n=z^nのx,y,zは自然数とならない。
nが自然数でなければ明確に反例が知られている。なので、これは真っ赤な嘘。
そんなことも理解できず、正確な主張すら書けない日高の書いたものは、
全てが誤魔化し。証明とは呼べない。
証明とは、正確な記述と正しい論理に基づく正確な推論の積み重ねでなければならない。
根拠を聞かれても、どのような推論をしたのかを細かく分解して説明出来ないものは証明ではない。
自分が今まで嘘をつき通してきたことが理解できるまで勉強しろ。理解できなければ返信するな。ゴミ。
- 883 :132人目の素数さん:2020/11/28(土) 11:46:26.27 ID:KJCRmjGK.net
- >>880
>はい。
では論を進めます。
(修正10)の
> (3)はn>2のとき、x,y,zは整数比とならない。
このことの理由はあなたが>>604でおっしゃったように
> (3)のyが無理数のとき、x,y,zが整数比となるならば、(3)のyが有理数のときに整数比となります。
ですか?
はい/いいえ でお答えください。
- 884 :132人目の素数さん:2020/11/28(土) 12:08:21.23 ID:a85aTjy8.net
- >>809 日高
> >797
> 式が同じか違うかを質問したのではありません。
> この証明は正しいでしょうか? とお尋ねしています。
> 考えを述べてください。
>
> 式が違うので、わかりません。
x^3+8y^3=z^3はx^3+(2y)^3=z^3ですから
「x^3+8y^3=z^3は自然数解を持たない」は「x^3+y^3=z^3は自然数解を持たない」と同値な命題です。
同値であるだけでなく、同じ証明が通用するはずなんですけどね。
どうして「わかりません」なのでしょう。
実は日高さんは自分の書いた【証明】が理解できていないのでは?
- 885 :日高:2020/11/28(土) 12:18:12.46 ID:0fpuH75L.net
- >883
このことの理由はあなたが>>604でおっしゃったように
> (3)のyが無理数のとき、x,y,zが整数比となるならば、(3)のyが有理数のときに整数比となります。
ですか?
はい。
- 886 :日高:2020/11/28(土) 12:23:19.90 ID:0fpuH75L.net
- >884
x^3+8y^3=z^3はx^3+(2y)^3=z^3ですから
「x^3+8y^3=z^3は自然数解を持たない」は「x^3+y^3=z^3は自然数解を持たない」と同値な命題です。
同値であるだけでなく、同じ証明が通用するはずなんですけどね。
(2y)とyは、違います。
x^3+y^3=z^3と、(2x)^3+(2y)^3=(2z)^3は、同値です。
総レス数 1002
502 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver.24052200