Pagini recente » Cod sursa (job #2747519) | Cod sursa (job #2032082) | Cod sursa (job #1962531) | Cod sursa (job #2845568) | Cod sursa (job #2785740)
#include <fstream>
#include <queue>
std::ifstream in("multiplu.in");
std::ofstream out("multiplu.out");
const int N = 2e6 + 1;
int previous[N];
bool digit[N];
int a, b, lcm;
int gcd(int a, int b){
if(!b)
return a;
return gcd(b, a%b);
}
void choice(std::queue<int> &q, int currRest, bool d, bool &found){
int newRest = (currRest * 10 + d) % lcm;
if(previous[newRest] != 0) return;
q.push(newRest);
previous[newRest] = currRest;
digit[newRest] = d;
found = (newRest==0);
}
void bfs(){
std::queue<int> q{{1}};
digit[1] = 1;
previous[1] = -1;
bool found = false;
while(!q.empty() && !found){
int currRest = q.front();
q.pop();
choice(q, currRest, 0, found);
choice(q, currRest, 1, found);
}
}
int main(){
in>>a>>b;
lcm = a*b / gcd(a,b);
unsigned long long res=0, power = 1;
int currRest = 0;
bfs();
while(currRest >= 0){
res += digit[currRest]*power;
power *= 10;
currRest = previous[currRest];
}
out<<res;
}