传送门:http://codevs.cn/problem/4109/
我们最终就是求一个前面全是1,后面都是0的数
我写的构造
0很明显是为2和5这两个约数服务的,所以要能约完这两个才行
前面的逐位叠加判定即可
【题解里有大神提出了一个BSGS的做法(我没认真看)】
#include<stdio.h>
#include<algorithm>
int n,tot2,tot5,tot0,tot1;
int main()
{
scanf("%d",&n);
for (;(n&1)==0;n>>=1) tot2++;
for (;n%5==0;n/=5) tot5++;
tot0=std::max(tot2,tot5);
for (int p=1%n;p;p=(p*10+1)%n) tot1++;
for (int i=0;i<=tot1;i++) putchar('1');
for (int i=0;i<tot0;i++) putchar('0');
}