Pagini recente » Cod sursa (job #1410425) | Cod sursa (job #133659) | Cod sursa (job #1663248) | Cod sursa (job #1876726) | Cod sursa (job #343859)
Cod sursa(job #343859)
#include<stdio.h>
#include<string.h>
char ac[100010],bh[50010],bb[200010];
int c,L,LB,i,j,p,val[200];
long long a,M,sol,Sol(int poz,long long baza);
void read(),solve();
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("calcul.in","r",stdin);
freopen("calcul.out","w",stdout);
scanf("%s",ac);
scanf("%s",bh);
scanf("%d",&c);
}
void solve()
{
L=strlen(ac);
p=L-c>0?L-c:0;
for(i=p;i<L;i++)
{
a*=10;
a+=ac[i]-'0';
}
L=strlen(bh);
for(i=0;i<L;i++)
bh[i]=(bh[i]>='A')?bh[i]-'A'+10:bh[i]-'0';
for(i=L-1;i>=0;i--)
for(j=0;j<4;j++)
{
bb[LB++]=bh[i]&1;
bh[i]>>=1;
}
while(!bb[LB-1])LB--;
M=1;for(i=1;i<=c;i++)M*=10;
sol=Sol(0,a);
sol*=a;sol%=M;
printf("%lld\n",sol);
}
long long Sol(int poz,long long baza)
{
long long ret;
if(poz==LB-1)return 1LL;
if(!baza)return 1LL;
ret=Sol(poz+1,(baza*baza)%M);
ret*=baza+1;
ret%=M;
if(bb[poz])
{
ret*=baza;
ret%=M;
ret++;
ret%=M;
}
return ret;
}