题目大意
给出了一个正整数 N ( N < = 100000 ) N(N<=100000) N(N<=100000),求一个最小的正整数 M M M,使得 N ∗ M N*M N∗M的十进制表示形式中只含 1 1 1和 0 0 0。
题目解析
暴力枚举出
1
1
1~
1
0
1
10^1
101
8
^8
8中的所有只含
0
0
0和
1
1
1的十进制数,升序。
找出第一个整除
N
N
N的数,相除即可。
代码
#include<bits/stdc++.h>
using namespace std;
int n,cnt;
unsigned long long f[5000005];
void dfs(int lev,unsigned long long sum)
{
f[++cnt]=sum;
if(lev>19) return;
dfs(lev+1,sum*10);
dfs(lev+1,sum*10+1);
}
int main()
{
cin>>n;
dfs(1,1);
sort(f+1,f+1+cnt);
for(int i=1;i<=cnt;i++)
if(f[i]%n==0)
{
cout<<f[i]/n;
return 0;
}
cout<<"no solution";
}