Pagini recente » Cod sursa (job #788843) | Cod sursa (job #1737526) | Cod sursa (job #740015) | Cod sursa (job #2415372) | Cod sursa (job #462883)
Cod sursa(job #462883)
#include <stdio.h>
#include <string.h>
#define NMAX 105
#define LMAX 155
#define ll long long
char line[NMAX];
int A[NMAX],act[LMAX];
ll rez;
inline int cif(char x)
{
return x>='0' && x<='9';
}
void read()
{
fgets(line+1,NMAX,stdin);
while (cif(line[A[0]+1]))
A[++A[0]]=line[A[0]]-'0';
int i,t;
for (i=1; i<=A[0]/2; i++)
t=A[i],A[i]=A[A[0]-i+1],A[A[0]-i+1]=t;
}
void mul(int A[], ll B)
{
int i;
ll t=0;
for (i = 1; i <= A[0] || t; i++, t /= 10)
A[i] = (t += (ll)A[i] * B) % 10;
A[0] = i - 1;
}
inline int smaller(ll baza,int exp)
{
memset(act,0,sizeof(act));
act[0]=1; act[1]=1;
int i;
for (i=1; i<=exp; i++)
{
mul(act,baza);
if (act[0]>100)
return 0;
}
if (act[0]<A[0])
return 1;
if (act[0]>A[0])
return 0;
for (i=act[0]; i>=1; i--)
{
if (act[i]<A[i])
return 1;
if (act[i]>A[i])
return 0;
}
return 1;
}
inline int egal(ll baza,int exp)
{
memset(act,0,sizeof(act));
act[0]=1; act[1]=1;
int i;
for (i=1; i<=exp; i++)
{
mul(act,baza);
if (act[0]>100)
return 0;
}
if (act[0]!=A[0])
return 0;
for (i=1; i<=A[0]; i++)
if (A[i]!=act[i])
return 0;
return 1;
}
int cbin(int exp)
{
ll i,step=(1LL<<60);
for (i=0; step; step>>=1)
if (smaller(i+step,exp))
i+=step;
if (!egal(i,exp))
return 0;
rez=i;
return 1;
}
void solve()
{
int i;
for (i=155; i>=2; i--)
if (cbin(i))
{
printf("%lld\n",rez);
printf("%d\n",i);
return ;
}
printf("%s\n1\n",line+1);
}
int main()
{
freopen("numere2.in","r",stdin);
freopen("numere2.out","w",stdout);
read();
solve();
return 0;
}