Skip to content
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

Merged
merged 14 commits into from
Feb 6, 2024
Merged

fps #92

merged 14 commits into from
Feb 6, 2024

Conversation

shinchankosen
Copy link
Contributor

大変遅くなりました。
説明とかはまだなにも書いてないですがとりあえず動きます。

他のテストと説明はあとで追加します。それ以外で変更してほしいところあればお願いします。

@shinchankosen
Copy link
Contributor Author

足りない機能

  • taylor shift
  • 合成関数

@shinchankosen
Copy link
Contributor Author

taylor-shift done
sqrtはsqrt modがないとできない。

@shinchankosen
Copy link
Contributor Author

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);
Copy link
Contributor

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)の意味がなさそう)それじゃだめなんですかね?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

両方実行してみます

Copy link
Contributor Author

@shinchankosen shinchankosen Oct 12, 2023

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
 うしさんのを見るとけんちょんさんのと同じことをしているっぽいのでそのままにします。

Copy link
Contributor

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);

です

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

@KowerKoint KowerKoint Oct 13, 2023

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)をつけるのが正しい

という主張でした

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

時間的には全部変わらないですね。どうしましょう?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

時間が変わらないのは意外ですが、任せます
(個人的には変なので変えたい)

cpp/fps.hpp Outdated Show resolved Hide resolved
@shinchankosen
Copy link
Contributor Author

ところで、けんちょんさんのライブラリの最新版はfriend operatorと.hoge() も両方使えるようにしてますが、好みはありますか

@shinchankosen
Copy link
Contributor Author

それと、積分を他の方々はそのままintegralとしていますが、C++20以降でintegralが予約語になってしまって先日エラーが発生したので仮にintgとしています。いい名前ありますかね?

@KowerKoint
Copy link
Contributor

僕は.hoge()のほうが好きでそれだと.integral()で問題ないんですが、どうするべきかな
differentialの略でdiffなのでintegralも略称にして良さそうなんですが、お決まりの略はなさそうです(intgでよさそう)

@shinchankosen
Copy link
Contributor Author

どっちの方が高速とかってあるんですか

@KowerKoint
Copy link
Contributor

変わらないと思います

@shinchankosen
Copy link
Contributor Author

まぁたしかにmodintとかもhoge.inv()なのでそっちにそろえます。両方使えた方が便利かなとも思いますがどうでしょうか?

@KowerKoint
Copy link
Contributor

じゃあ入れましょう

@shinchankosen
Copy link
Contributor Author

shinchankosen commented Jan 20, 2024

inline FPS& operator >>= (int x) {
FPS res;
if((int) this->size() <= x) return *this = res;
res.insert(res.end(), begin(*this) + x, end(*this));
return *this = res;
} にする。
 

した。バグとかではないけどあった方がうれしい

@KowerKoint
Copy link
Contributor

これ適当なタイミングでマージしてまた追加したい機能があったら都度加える形にしたいんですが大丈夫ですか

@shinchankosen
Copy link
Contributor Author

doxygenなくていいならそれで良さそうです

@shinchankosen shinchankosen marked this pull request as ready for review January 21, 2024 06:37
@KowerKoint KowerKoint merged commit 5b722d1 into main Feb 6, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants