Блог пользователя adamant

Автор adamant, история, 3 года назад, По-английски

Hi everyone!

It's been quite some time since I wrote two previous articles in the cycle:

Part 1: Introduction
Part 2: Properties and interpretation
Part 3: In competitive programming

This time I finally decided to publish something on how one can actually use continued fractions in competitive programming problems.

Few months ago, I joined CP-Algorithms as a collaborator. The website also underwent a major design update recently, so I decided it would be great to use this opportunity and publish my new article there, so here it is:

CP-Algorithms — Continued fractions

It took me quite a while to write and I made sure to not only describe common competitive programming challenges related to continued fractions, but also to describe the whole concept from scratch. That being said, article is supposed to be self-contained.

Main covered topics:

  1. Notion of continued fractions, convergents, semiconvergents, complete quotients.
  2. Recurrence to compute convergents, notion of continuant.
  3. Connection of continued fractions with the Stern-Brocot tree and the Calkin-Wilf tree.
  4. Convergence rate with continued fractions.
  5. Linear fractional transformations, quadratic irrationalities.
  6. Geometric interpretation of continued fractions and convergents.

I really hope that I managed to simplify the general story-telling compared to previous 2 articles.

Here are the major problems that are dealt with in the article:

  • Given $$$a_1, \dots, a_n$$$, quickly compute $$$[a_l; a_{l+1}, \dots, a_r]$$$ in queries.
  • Which number of $$$A=[a_0; a_1, \dots, a_n]$$$ and $$$B=[b_0; b_1, \dots, b_m]$$$ is smaller? How to emulate $$$A-\varepsilon$$$ and $$$A+\varepsilon$$$?
  • Given $$$A=[a_0; a_1, \dots, a_n]$$$ and $$$B=[b_0; b_1, \dots, b_m]$$$, compute the continued fraction representations of $$$A+B$$$ and $$$A \cdot B$$$.
  • Given $$$\frac{0}{1} \leq \frac{p_0}{q_0} < \frac{p_1}{q_1} \leq \frac{1}{0}$$$, find $$$\frac{p}{q}$$$ such that $$$(q,p)$$$ is lexicographically smallest and $$$\frac{p_0}{q_0} < \frac{p}{q} < \frac{p_1}{q_1}$$$.
  • Given $$$x$$$ and $$$k$$$, $$$x$$$ is not a perfect square. Let $$$\sqrt x = [a_0; a_1, \dots]$$$, find $$$\frac{p_k}{q_k}=[a_0; a_1, \dots, a_k]$$$ for $$$0 \leq k \leq 10^9$$$.
  • Given $$$r$$$ and $$$m$$$, find the minimum value of $$$q r \pmod m$$$ on $$$1 \leq q \leq n$$$.
  • Given $$$r$$$ and $$$m$$$, find $$$\frac{p}{q}$$$ such that $$$p, q \leq \sqrt{m}$$$ and $$$p q^{-1} \equiv r \pmod m$$$.
  • Given $$$p$$$, $$$q$$$ and $$$b$$$, construct the convex hull of lattice points below the line $$$y = \frac{px+b}{q}$$$ on $$$0 \leq x \leq n$$$.
  • Given $$$A$$$, $$$B$$$ and $$$C$$$, find the maximum value of $$$Ax+By$$$ on $$$x, y \geq 0$$$ and $$$Ax + By \leq C$$$.
  • Given $$$p$$$, $$$q$$$ and $$$b$$$, compute the following sum:
$$$\sum\limits_{x=1}^n \lfloor \frac{px+b}{q} \rfloor.$$$

So far, here is the list of problems that are explained in the article:

And an additional list of practice problems where continued fractions could be useful:

There are likely much more problems where continued fractions are used, please mention them in the comments if you know any!

Finally, since CP-Algorithms is supposed to be a wiki-like project (that is, to grow and get better as time goes by), please feel free to comment on any issues that you might find while reading the article, ask questions or suggest any improvements. You can do so in the comments below or in the issues section of the CP-Algorithms GitHub repo. You can also suggest changes via pull request functionality.

  • Проголосовать: нравится
  • +159
  • Проголосовать: не нравится

»
3 года назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится

346E - Doodle Jump can be solved using the idea of continued fractions.

  • »
    »
    3 года назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Thanks! I kind of see how to formulate it in continued fraction terms, but I'm not sure how to solve it. And I couldn't understand the tutorial, unfortunately... Could you please elaborate a bit on the solution?

    • »
      »
      »
      3 года назад, # ^ |
        Проголосовать: нравится +13 Проголосовать: не нравится
      Spoiler