Pagini recente » Cod sursa (job #377755) | Cod sursa (job #2429978) | Cod sursa (job #783542) | Cod sursa (job #385041) | Cod sursa (job #419637)
Cod sursa(job #419637)
#include<stdio.h>
#include<string>
long p,n;
long desc[100],t;
long aval[100];
long s1[100],sz1,mx;
long s2[100],sz2;
void read();
void baz(long x);
void init();
void doit();
long power(long x, long y);
void write();
int main() {
read();
baz(n);
init();
doit();
write();
return 0;
}
void read() {
freopen("balanta.in","r",stdin);
scanf("%ld%ld",&p,&n);
}
void baz(long x) {
if (x==0) return;
desc[++t]=x%p;
baz(x/p);
}
void init() {
int se=(p-1)/2;
for (int i=0;i<100;++i)
aval[i]=se;
}
void doit() {
int i;
mx=t;
for (i=1;i<=mx;++i)
if (desc[i]!=0)
if (desc[i]>p-desc[i])
while (desc[i]!=0) {
++desc[i];
s1[++sz1]=power(p,i-1);
int aux=i;
while (desc[aux]==p) {
desc[aux]=0;
++desc[aux+1];
++aux;
if (aux>mx)
mx=aux;
}
}
else
while (desc[i]!=0) {
--desc[i];
s2[++sz2]=power(p,i-1);
}
}
long power(long x, long y) {
if (y==0) return 1;
return x*power(x,y-1);
}
void write() {
long i;
freopen("balanta.out","w",stdout);
printf("%ld\n",mx*(p-1)/2);
printf("%ld ",n);
for (i=1;i<=sz1;++i)
printf("%ld ",s1[i]);
printf("\n");
for (i=1;i<=sz2;++i)
printf("%ld ",s2[i]);
}