-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fps #92
fps #92
Conversation
足りない機能
|
taylor-shift done |
testは以上です。分割数のは2通りの解法で通しています。1の方はexp-logのテクを使った解法です。2の方はオイラーの五角数定理を用いた解法です。後者の方が定数倍は軽いはずです。 |
assert(f[0] == 0); | ||
FPS res(1, 1); | ||
for (int i = 1; i < deg; i <<= 1) { | ||
res = res * (f.pre(i<<1) - log(res, i<<1) + 1).pre(i<<1); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
これ、drkenさんのライブラリでそうなってたのの引用かと思うんですが、
res * ...をしてからの.pre(i<<1)にしたら早そうで、(というか...の計算結果はi<<1項なので.pre(i<<1)の意味がなさそう)それじゃだめなんですかね?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
両方実行してみます
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nyaanさんの方にはexpがみあたらなかったです。https://ei1333.github.io/library/math/fps/formal-power-series.hpp
うしさんのを見るとけんちょんさんのと同じことをしているっぽいのでそのままにします。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
いえ、うしさんは
res = res * (f.pre(i<<1) - log(res, i<<1) + 1).pre(i<<1);
ではなく
res = (res * (f.pre(i<<1) - log(res, i<<1) + 1)).pre(i<<1);
です
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-
(f.pre(i<<1) - log(res, i<<1) + 1)
はすでにi<<1項なので(f.pre(i<<1) - log(res, i<<1) + 1).pre(i<<1)
は意味がない -
res * (f.pre(i<<1) - log(res, i<<1) + 1).pre(i<<1)
は掛け算の結果項の数が多くなってるがほしいのはmod$x^{2^i}$ の値だけなのでこの結果には.pre(i<<1)
をつけるのが正しい
という主張でした
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
時間的には全部変わらないですね。どうしましょう?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
時間が変わらないのは意外ですが、任せます
(個人的には変なので変えたい)
ところで、けんちょんさんのライブラリの最新版はfriend operatorと.hoge() も両方使えるようにしてますが、好みはありますか |
それと、積分を他の方々はそのままintegralとしていますが、C++20以降でintegralが予約語になってしまって先日エラーが発生したので仮にintgとしています。いい名前ありますかね? |
僕は.hoge()のほうが好きでそれだと.integral()で問題ないんですが、どうするべきかな |
どっちの方が高速とかってあるんですか |
変わらないと思います |
まぁたしかにmodintとかもhoge.inv()なのでそっちにそろえます。両方使えた方が便利かなとも思いますがどうでしょうか? |
じゃあ入れましょう |
inline FPS& operator >>= (int x) { した。バグとかではないけどあった方がうれしい |
これ適当なタイミングでマージしてまた追加したい機能があったら都度加える形にしたいんですが大丈夫ですか |
doxygenなくていいならそれで良さそうです |
大変遅くなりました。
説明とかはまだなにも書いてないですがとりあえず動きます。
他のテストと説明はあとで追加します。それ以外で変更してほしいところあればお願いします。