任意一个整正数N,求一个最小的正整数M(M>1),使得M*N的十进制表示形式只包含1和0
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 7 int main() 8 { 9 long long M,N; 10 N=99; 11 long long reminder[N]; 12 int i,j,k; 13 int noUpdates=0; 14 for(i=0; i<N; i++) 15 { 16 reminder[i]=0; 17 } 18 //dp 19 reminder[1]=1; 20 for(i=1,j=10%N; ;i++,j=(j*10)%N) 21 { 22 long long X=(long long)pow(10,i); 23 bool flag=false; 24 if(reminder[j]==0) 25 { 26 flag=true; 27 reminder[j]=X; 28 } 29 30 for(k=1; k<N; k++) 31 { 32 if(reminder[k]>0 33 && X > reminder[k] 34 && reminder[(k+j)%N] ==0) 35 { 36 flag=true; 37 reminder[(k+j)%N] = X+reminder[k]; 38 } 39 } 40 if(flag=false) 41 { 42 noUpdates++; 43 } 44 else 45 { 46 noUpdates=0; 47 } 48 if(noUpdates == N || reminder[0]>0) 49 { 50 break; 51 } 52 } 53 if(reminder[0]==0) 54 { 55 cout<<"no rlt"<<endl; 56 } 57 else 58 { 59 cout<<reminder[0]/N<<endl; 60 } 61 return 0; 62 }