Pagini recente » Cod sursa (job #2634642) | Cod sursa (job #137747) | Cod sursa (job #1249529) | Cod sursa (job #1149670) | Cod sursa (job #1818669)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("numere2.in");
ofstream g("numere2.out");
const int base=10000;
const int nmax=1000;
string ps;
int p2[360][nmax],aux[nmax],auxiliar[nmax],put2[nmax],k[nmax],p10[5],povv[15],p[nmax],aux2[nmax];
int nr,put,i,j,idx,pp,numar,zero,t,inv;
void mems(int A[])
{
for(idx=1;idx<=A[0];idx++)
A[idx]=0;
A[0]=0;
}
void memc(int X[],int Y[])
{
for(idx=1;idx<=Y[0];idx++)
X[idx]=Y[idx];
for(idx=Y[0]+1;idx<=X[0];idx++)
X[idx]=0;
X[0]=Y[0];
}
void ad(int A[],int B[],int C[])
{
C[0]=max(A[0],B[0]);
for(idx=1;idx<=C[0];idx++)
{
C[idx]+=(A[idx]+B[idx]);
if(C[idx]>=base)
{
C[idx]-=base;
C[idx+1]++;
if(idx==C[0]) C[0]++;
}
}
}
void mult(int A[],int B[],int C[])
{
C[0]=A[0]+B[0]-1;
for(idx=1;idx<=A[0];idx++)
for(j=1;j<=B[0];j++)
{
C[idx+j-1]+=A[idx]*B[j];
if(C[idx+j-1]>=base)
{
C[idx+j]+=C[idx+j-1]/base;
C[idx+j-1]%=base;
if(idx+j>C[0]) C[0]=idx+j;
}
}
}
void exponent(int A[],int putere,int B[])
{
mems(put2);
memc(put2,A);
for(pp=0;povv[pp]<=putere;pp++)
{
if((povv[pp]&putere))
{
mems(auxiliar);
mult(B,put2,auxiliar);
memc(B,auxiliar);
}
mems(auxiliar);
mult(put2,put2,auxiliar);
memc(put2,auxiliar);
}
}
int comp(int A[],int B[])
{
if(A[0]==B[0])
{
for(idx=A[0];idx>=1;idx--)
if(A[idx]!=B[idx])
{
if(A[idx]<B[idx]) return -1;
if(B[idx]<A[idx]) return 1;
}
}
if(A[0]<B[0]) return -1;
if(B[0]<A[0]) return 1;
return 0;
}
void afis(int A[])
{
zero=4;
for(idx=A[0];idx>=1;idx--)
{
if(idx!=A[0]) numar=A[idx];
while(numar!=0)
{numar/=10;zero++;}
for(j=1;j<=4-zero;j++)
g<<'0';
g<<A[idx];
zero=0;
}
}
int main()
{
f>>ps;
p10[0]=1;povv[0]=1;
for(i=1;i<4;i++)
p10[i]=p10[i-1]*10;
for(i=1;i<=10;i++)
povv[i]=2*povv[i-1];
p[0]=ps.size()/4+1;
for(i=0;i<ps.size();i++)
{
j=ps.size()-i-1;
p[(i/4)+1]=p[(i/4)+1]+p10[i%4]*(ps[j]-'0');
}
if(p[p[0]]==0) p[0]--;
p2[0][0]=1;p2[0][1]=1;
for(i=1;comp(p2[i-1],p)<=0;i++)
{ad(p2[i-1],p2[i-1],p2[i]),nr=i;}
afis(aux);
for(put=nr;put>=2;put--)
{
mems(k);
for(i=nr/put+1;i>=0;i--)
{
mems(aux);
ad(k,p2[i],aux);
mems(aux2);
aux2[0]=1;aux2[1]=1;
exponent(aux,put,aux2);
t=comp(aux2,p);
if(t==0)
{
memc(k,aux);
afis(k);
g<<'\n';
g<<put<<'\n';
return 0;
}
if(t==-1)
{
memc(k,aux);
}
}
}
g<<ps<<'\n'<<"1";
return 0;
}