Problem:
Score : 500 points

Problem Statement

Let us denote by f(x, m) the remainder of the Euclidean division of x by m.

Let A be the sequence that is defined by the initial value A_1=X and the recurrence relation A_{n+1} = f(A_n^2, M).
Find \displaystyle{\sum_{i=1}^N A_i}.

Constraints

1 \leq N \leq 10^{10}

0 \leq X < M \leq 10^5

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N X M

Output

Print \displaystyle{\sum_{i=1}^N A_i}.

Sample Input 1

6 2 1001

Sample Output 1

1369

The sequence A begins 2,4,16,256,471,620,\ldots Therefore, the answer is 2+4+16+256+471+620=1369.

Sample Input 2

1000 2 16

Sample Output 2

6

The sequence A begins 2,4,0,0,\ldots Therefore, the answer is 6.

Sample Input 3

10000000000 10 99959

Sample Output 3

492443256176507

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include<bits/stdc++.h>
#define ll long long
#define dbg(x) cout<<#x<<": "<<x<<endl;
#define N 300005
#define M 1000000007
#define pii pair<ll,ll>
#define fast ios_base::sync_with_stdio(0);cin.tie(0);
using namespace std;

map<ll,ll>lst;

ll pref[N];

main()
{
    //cout<< (9999999212)/786;
    ll n,x,m;
    cin>>n>>x>>m;

    pref[1]=x;
    lst[x]=1;

    for(ll i=2;i<=n;i++)
    {
        x=(x*x)%m;

        if(lst[x]!=0)
        {
//            cout<<endl;
//            cout<<"in"<<endl;
            ll len=i-lst[x];
            ll cycsum=pref[i-1]-pref[lst[x]-1];
            ll baki=n-i+1;

            ll cyc=baki/len,ex=baki%len;
            ll ans=pref[i-1]+cyc*cycsum;
            //cout<<cyc<<' '<<ex<<' '<<cycsum<<' '<<len<<' '<<baki<<endl;
            if(ex)
            {
                ans+=pref[lst[x]+ex-1]-pref[lst[x]-1];
            }
            cout<<ans;
            return 0;
        }
        lst[x]=i;
        pref[i]=pref[i-1]+x;
    }
    cout<<pref[n];
}
/*
786 9999999212
*/