#include<stdio.h> #include<string.h> #define N 1100 int n,str[N],k[N],a[N]; char p[N]; void pown() { int i,j,b[N],g; for(i=1;i<=N;i++){a[i]=0;} a[0]=1; for(g=0;g<n;g++) { for(i=0;i<N;i++) { b[i]=a[i]; a[i]=0; } for(i=0;i<N;i++) { for(j=0;j<10;j++) { a[i+j]+=b[i]*k[j]; } } for(i=0;i<N-1;i++) { a[i+1]+=a[i]/10; a[i]=a[i]%10; } } } int main() { int i,j; while(~scanf("%d%s",&n,p)) { for(i=0;i<=10;i++)k[i]=0; int len=strlen(p); for(i=0;i<len;i++) { a[i]=p[i]-'0'; } for(i=0;i<N;i++)str[i]=0;//不要忘了将str清0,否则会错 for(j=0,i=len-1;j<len;i--,j++)str[j]=a[i];//将p倒置 for(i=9;i>=0;i--)//将k值从高位到低位一次尝试 { for(k[i]=9;k[i]>=0;k[i]--) { pown();//求k的n次方 for(j=N-1;j>=0;j--) { if(a[j]!=str[j])break; } if(a[j]<=str[j])break; //如果a(即此时的k^n值)小于等于p那么k的第i位值为当前值 } } for(i=9;i>0;i--) { if(k[i]!=0)break; } for(;i>=0;i--) { printf("%d",k[i]); } printf("\n"); } }