题目的意思是求解一个数(只由0,1组成),这个数是n的倍数;
最开始应该是mod[i]=mod[i/2]*10+i%2
求这个数模n是否等于0;如果说等于0就说明这个数是n的倍数
但因为mod[i]中储存的数字会过大,所以可以根据同余方程采取一步一模的思想
同余模定理
(a*b)%n = (a%n *b%n)%n
(a+b)%n = (a%n +b%n)%n
两个数乘积的模等于两个数模的余数的乘积
#include <iostream>
using namespace std;
int main()
{
long long x[600001],res[200];
int n;
while (cin>>n&&n!=0)
{
int i,j;
x[1]=1;
for (i=2;;i++)
{
if(x[i-1]==0) break;
x[i]=(x[i/2]*10+i%2)%n;
}
i--;
j=0;
while (i)
{
res[j++]=i%2;
i/=2;
}
for (int i=j-1;i>=0;i--)
cout<<res[i];
cout<<endl;
}
return 0;
}