天天看點

51nod 1116 K進制下的大數

點這裡

一開始一直WA。。因為進制從2開始無論是多少結果都是二

要從最大數加一的進制開始周遊

後來TLE 結果 改掉了模拟進制轉換結果就A了。。

數學題。。運氣。。

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
using namespace std;
char x[100005];
int t[100005];
long long mc(int x,int y)
{  long long ans=1;
    for(int i=0;i<y;i++)
        ans=ans*x%(x-1);
    return ans;
}
int main()
{
  while(cin>>x)
  {  int f=0;long long ans=0;
      int len=strlen(x);int  max1=2;
    for(int i=0;i<len;i++)
    {
        if(x[i]>='0'&&x[i]<='9')
            t[len-i-1]=x[i]-'0';
        else
           {
               f=1;t[len-i-1]=x[i]-'A'+10;
           }
           max1=max(t[len-i-1],max1);
    }

    int i,j;
     for( i=max1+1;i<=36;i++)
      {  long long b=0;
          for(j=0;j<len;j++)
          {
             b+=t[j]%(i-1);
          }
        if(b%(i-1)==0)
       {ans=i;break;}
      }
      if(ans!=0)
      cout<<ans<<endl;
      else
        cout<<"No Solution"<<endl;
  }
    return 0;
}