Cod sursa(job #2044087)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 20 octombrie 2017 21:28:43
Problema Calcul Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

long long sol, a, b, mod;
int c, k, l;
char nr[9];

long long putere(long long p, long long a)
{
    if(p==0)
        return 1;
    if(p%2==0)
        return putere(p/2, (a*a)%mod)%mod;
    return (a*putere(p-1, a))%mod;
}

long long putere_10(int p, long long a)
{
    if(p==0)
        return 1;
    if(p%2==0)
        return putere_10(p/2, a*a);
    return a*putere_10(p-1, a);
}

void euclidex(long long a, long long b, int &k, int &l)
{
    if(b==0)
    {
        l=1;
        k=0;
        return;
    }
    int k1, l1;
    euclidex(b, a%b, k1, l1);
    l=k1;
    k=l1-(a/b)*k1;
}

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

    scanf("%lld\n%s\n%d\n", &a, nr, &c);
    for(int i=0;i<=strlen(nr)-1;i++)
        if(nr[i]>='0' && nr[i]<='9')
                b=b*16+nr[i]-'0';
            else
                b=b*16+nr[i]-'A'+10;
    mod=putere_10(c+1, 10);
    sol=putere(b+1, a%mod)-a;
    euclidex((a-1), mod, k, l);
    while(l<0)
        l+=mod;
    printf("%lld", (l*sol)%mod);
    return 0;
}