Cod sursa(job #2054208)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 1 noiembrie 2017 19:40:24
Problema Calcul Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <cstring>
#include <cstdio>
#include <vector>
#define N 500005

using namespace std;

int a, c;
long long mod, rez;
char s[N];
vector <int> b;

int calc_modulo(int b, int p)
{
    if(p==0)
        return 1;
    if(p%2==0)
        return calc_modulo(b*b, p/2);
    return calc_modulo(b, p-1)*b;
}

void calc_putere()
{
    for(int i=0;i<strlen(s);i++)
    {
        int var;
        if(s[i]>='0' && s[i]<='9')
            var=s[i]-'0';
        else
            var=s[i]-'A'+10;
        for(int i=3;i>=0;i--)
            if(var>=(1<<i))
            {
                b.push_back(1);
                var-=1<<i;
            }
            else
                b.push_back(0);
    }
}

void calc_rez()
{
    long long x=1;
    for(int i=0;i<b.size();i++)
    {
        rez=(rez*(x+1))%mod;
        x=(x*x)%mod;
        if(b[i])
        {
            x=(x*a)%mod;
            rez=(rez+x)%mod;
        }
    }
}

int main()
{
    freopen("calcul.in", "r", stdin);
    freopen("calcul.out", "w", stdout);

    scanf("%d\n%s\n%d\n", &a, s, &c);
    mod=calc_modulo(10, c);
    calc_putere();
    calc_rez();
    printf("%lld", rez);
    return 0;
}