Quantcast
Channel: CodeChef Discuss - latest questions
Viewing all articles
Browse latest Browse all 40121

SEQTOWER - Editorial

$
0
0

PROBLEM LINK:

Practice
Contest

Author:Devendra Agarwal
Tester:Surya Kiran
Editorialist:Amit Pandey

DIFFICULTY:

Medium-Hard

Problem:

You are given an array A consisting of prime numbers greater than 4.

Fun(S) = $A[S[1]]^{A[S[2]]^{...A[S[N]]}}$

You need to find the sum of the values returned by Fun(S) for every distinct sequence S.

Each element of S is an integer from 1 to N. Thus, there are $N^N$ possible sequences in all. As the values can be large, return it modulo M.

Solution:

Let us first solve a different problem to solve this problem

Problem Version 1 :

$A_i$ is a prime number greater than $M$ and $N <=1000$

Solution:

We will use recursive approach to solve this version of the problem.

First notice that $\phi(M)$ or $\phi(....\phi(M))))..)$ will always be coprime to all the numbers.

Recursive(L,M) returns an array where array[i] denotes denotes number of times i(less than M) appeared by using all N numbers for tower of length L.

You can find Recursive(Length-1,$\phi(Modulo)$) and find how many times value v ( which is less than $\phi(modulo)$ ) appeared .

You can use this info to calculate Recursive ( Length,Modulo)

How ?

For every possible v, we will apply on all $A_i$ as the base and calculate the modulo value again and update the counter of how many times the new value appeared.

Here is the psedo code for the idea:

for all possible v:
   for all i = 1 .. N:
      new_val = (A_i^v)%Modulo
      Times_Now[new_val] = Times_Now[new_val] + Times_Previous[v]

Complexity : $Modulo*N*Height$ = $N*M*log(M)$

Base Case : Modulo is 2 or 1 ( which ever is comfortable to you ) Or Length is 1.

Problem Version 2 :

Little Larger N (~ 1e5 ) and same as version 1.

Solution:

Now you can use this fact that atmost Modulo different values will be used.

Hence you can contract N values into M values and each appearing more than once.

for all i = 1..N:
   Number_of_times_appeared[A_i%Modulo] ++;

So, the Loop here changes to :

for all possible v {
   for all i =  0.. M-1 {
      new_val = (i^v)%Modulo
      Times_Now[new_val]=Times_Now[new_val]+Times_Previous[v]*Number_of_times_appeared[i]
    }
}

Time Complexity : $N*height + M*M*height = N*log(M) + M*M*log(M)$

Problem Version 3(Final Version):

Now the original problem

Solution:

Only thing which made our life simpler was that the $A_i$ was coprime to all the modulos in chain.

Now, we need to notice some interesting things here:

All $A_i$'s are prime numbers greater than 4

=>

$A_i ^ { any tower }$ % M where $A_i$ is not coprime to M

then M must be of the form $p^e * M_2$ , and $A_i$ must be $p$

Now notice that maximum value of e can be 5 for any p ( because $A_i$ > 4 , so smallest p is 5 and $5^6$ is more than 5000 )

Now if we use CRT and break the modulo in these two parts then one part is always 0. (which part ? )

Modulo of the tower from $p^e$ is always 0.(Except the Base Case which can be handled trivially)

Reason: Minimum number on the power will be 5, hence modulo with $p^e$ will always fetch 0 as result.

Now If we go back to CRT basics, we know that $a^b$ % M can be broken into $R_1 = a^b % M_1$ and $R_2 =a^b % M_2$

Here in our problem a is a prime number, $M_1$ is $a^e$

so, the solution from CRT is : $R_1*M_2*X_1 + R_2*M_1*X_2$

Here $X_1 = Inverse(M_2,M_1) , X_2 = Inverse(M_1,M_2)$

This equation reduces to : $R_2*M_1*X_2$ ( Because $R_1$ is $0$ )

Now this equation says $( a^b \bmod M_2 * M_1 *X_2 ) \bmod M$ is our final solution.

Note that $M_1*X_2$ is independent of $A_i$(or the a).

Now, the result $( (a^b \bmod M_2) * M_1 *X_2 )\bmod M$ is equivalent to saying $( (a \bmod M_2)*M1*X2 )^b \bmod M$

Reason for the second Part : Take Modulo $M_1$ , you will get $0$ , take modulo $M_2$ , you will get $(a^b) \bmod M_2$. This is the modulo pairs for the $M_1,M_2$ and by uniqueness of solution of crt , this solution is also correct

Now whats the benefit from this representation ?

We can contract our input which are not coprime by this formula : $(a \bmod M_2)*M_1*X_2$ and rest goes as it was in version 2 :)

AUTHOR'S, TESTER'S SOLUTIONS:

setter's solution
tester's solution


Viewing all articles
Browse latest Browse all 40121

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>