#define int ll
ll gcd(ll a,ll b){return b==0?a : gcd(b,a%b);}
char s[111];
int mul[111];
signed main()
{
mul[0]=1;
rpp(i,9) mul[i]=mul[i-1]*10;
int T;cin>>T;
while(T--)
{
ll n; cin>>s;
sscanf(s,"%I64d",&n);
int len=strlen(s);
for(int i=len;i<=18;++i)
{
ll ans=-1;
for(int j=1;j<=i/2;++j)
{
if(i%j==0)
{
ll cur=1;
for(int k=1;k<i/j;++k)
cur=cur*mul[j]+1;//构造出类似1001的乘数
ll d=gcd(cur,n);
ll x=n/d;//先让x尽可能小,用n除去gcd
if(x<mul[j])//满足右边界条件
{
ll y=mul[j-1]/x*x;//构造出大于mul[j-1]的//同时还是x得倍数得
if(y<mul[j-1]) y+=x;
if(ans==-1||y*cur<ans) ans=y*cur;
}
}
}
if(ans!=-1)
{
cout<<ans<<endl;
break;
}
}
}
return 0;
}
UVa 11256 - Repetitive Multiple(循环节)
最新推荐文章于 2022-04-05 00:47:47 发布