Pagini recente » Cod sursa (job #3170022) | Cod sursa (job #610222) | Cod sursa (job #1783199) | Cod sursa (job #311077) | Cod sursa (job #2966661)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("multiplu.in");
ofstream cout("multiplu.out");
const int NMAX = 2e6;
string inf = "2000000000000000000000000000000";
queue <string> q;
string min_num[NMAX + 1];
int cmmmc;
int cmmdc(int x, int y){
int r = 0;
while(y){
r = x % y;
x = y;
y = r;
}
return x;
}
int modulo(string x, int p){
int ans = 0;
for(int i = 0; x[i]; i++){
ans = ans * 10 + (x[i] - 48);
ans %= p;
}
return ans;
}
bool mai_mare(string a, string b){
if(a.size() < b.size())
return 0;
if(a.size() > b.size())
return 1;
for(int i = 0; a[i]; i++)
if(a[i] < b[i])
return 0;
return 1;
}
void bfs(string x){
q.push(x);
min_num[1] = "1";
while(!q.empty()){
string x = q.front();
q.pop();
// ma duc fie in rest r, fie in rest r + 1
int rm = modulo(x, cmmmc);
min_num[rm] = x;
//cout << x << " cu restul " << rm << "\n";
if(rm == 0)
return;
rm *= 10;
rm %= cmmmc;
if(mai_mare(min_num[rm], x + "0")){
min_num[rm] = x + "0";
q.push(x + "0");
}
rm = rm * 10 + 1;
rm %= cmmmc;
if(mai_mare(min_num[rm], x + "1")){
min_num[rm] = x + "1";
q.push(x + "1");
}
}
}
int main(){
int x = 0, y = 0;
cin >> x >> y;
if(x == y){
cout << x;
return 0;
}
cmmmc = x * y / cmmdc(x, y);
for(int i = 0; i < cmmmc; i++)
min_num[i] = inf;
bfs("1");
cout << min_num[0];
}