Processing math: 100%

Thursday, 4 January 2024

1295D - Same GCDs

 1295D - Same GCDs



I had to see the tutorial to understand this.

gcd(a, m) = gcd(a + x, m)

Now, using Euclid's algorithm, we can say that 

gcd(a, b) = gcd(a - b, b)

So, in our case, that would be:

gcd(a + x, m) = gcd(a + x - m, m) = gcd(a + x - 2 \times m, m) = ...  = gcd((a + x) \% m, m)

Now, in the problem it's given that 0 \leq x < m, so we can say that a \leq a + x < a + m, and therefore we can also say that 0 \leq (a + x)\%m < m

So, we can assume Y = (a + x)\%m

We can say:

gcd(a, m) = gcd(a + x, m) = gcd(Y, m)

Let's say that gcd(a, m) = G

So gcd(Y, m) =  G

This means that G can divide both Y, and m, and there are no further common divisors (besides 1) in Y and m. This means:

gcd(Y / G, m / G) = 1

Now notice that the variable here is Y/G. We want it to be such that it's co-prime to m/G. Also notice that since Y < m, Y/G < m/G. Therefore the Euler's totient function is applicable here. More details on that : https://cp-algorithms.com/algebra/phi-function.html

So we just need to calculate the totient function for m/G = m / gcd(a, m)

1476D - Journey

Tags : Problem statement Link : https://codeforces.com/contest/1476/problem/D   Gist There are n cities, connected by one directional road...