Pagini recente » Cod sursa (job #2007950) | Cod sursa (job #3225814) | Cod sursa (job #1531331) | Cod sursa (job #3040943) | Cod sursa (job #1121108)
#include <iostream>
#include<stdio.h>
using namespace std;
#define MAXI 10000
int a1,b1,c1,n;
int a11;
int numar;
int s;
int a10;
int a[MAXI],b[MAXI],c[MAXI];
int e[MAXI],f[MAXI];
void putere(int x)
{
while(x!=0)
{
a[++a[0]]=x%10;
x/=10;
}
b[0]=1;
b[1]=1;
for(int i=1;i<=11;i++)
{
s=0;
if(i==11)
{
for(int w=b[0];w>=1;w--)
{
a11=a11*10+b[w];
a11%=c1;
}
for(int w=0;w<=b[0];w++)
f[w]=b[w];
}
for(int j=1;j<=a[0];j++)
{
for(int u=1;u<=b[0]+2;u++)
{
c[j+u-1]+=a[j]*b[u]+s;
s=c[u+j-1]/10;
c[u+j-1]%=10;
}
}
s=a[0]+b[0]+2;
while(c[s]==0&&s>0)
s--;
c[0]=s;
for(int k=0;k<=s;k++)
{
b[k]=c[k];
c[k]=0;
}
}
int i=1;
s=0;
b[i]--;
while(b[i]<0)
{
b[i]+=10+s;
s=-1;
i++;
}
s=0;
for(i=b[0];i>=1;i--)
{
s=b[i]+s*10;
b[i]=s/(a1-1);
s=s%(a1-1);
}
for(int i=b[0];i>=1;i--)
{
numar=numar*10+b[i];
numar%=c1;
}
numar=(numar*b1)%c1;
}
int main()
{
freopen("radixsort.in","r",stdin);
freopen("radixsort.out","w",stdout);
scanf("%d %d %d %d",&n,&a1,&b1,&c1);
putere(a1);
e[++e[0]]=numar;
s=0;
int i=1;
f[i]--;
while(f[i]<0)
{
f[i]+=10+s;
s=-1;
i++;
}
s=0;
for(i=f[0];i>=1;i--)
{
s=f[i]+s*10;
f[i]=s/(a1-1);
s=s%(a1-1);
}
numar=0;
for(int i=f[0];i>=1;i--)
{
numar=numar*10+f[i];
numar%=c1;
}
numar=numar*b1;
numar%=c1;
for(int i=21;i<=n;i+=10)
{
e[++e[0]]=a11*e[e[0]-1]+numar;
e[e[0]]%=c1;
}
for(int i=b[0];i>=1;i--)
printf("%d",b[i]);
return 0;
}