Cod sursa(job #2879988)

Utilizator tudor_costinCostin Tudor tudor_costin Data 29 martie 2022 11:54:22
Problema Multiplu Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("multiplu.in");
ofstream fout("multiplu.out");
queue<int> q;
int viz[2000005],previ[2000005];
bool ciur[100000];
int x;
void reconst(int y)
{
    if(y==1)
    {
        fout<<1;
        return;
    }
    reconst(previ[y]);
    if((previ[y]*10)%x==y)
    {
        fout<<0;
    }
    else
    {
        fout<<1;
    }
}
int main()
{
    for(int i=2;i*i<=100000;i++)
{
    if(ciur[i]==0)
    {
        for(int j=i*i;j<=100000;j+=i)
        {
            ciur[j]=1;
        }
    }
}
    x=1;
    int a,b,aux1,aux2,aux;
    fin>>a>>b;
    aux=b;
    b=max(a,b);
    if(b==a)
    {
        a=aux;
    }
    aux1=a;
    aux2=b;
    for(int i=2;i<=b;i++)
    {
        if(ciur[i]==0)
        {
            while(a%i==0 || b%i==0)
            {
                if(i<=a)a=a/i;
                b=b/i;
                x=x*i;
            }
            a=aux1;
            b=aux2;
        }
    }
    q.push(1);
    viz[1]=1;
    while(!q.empty())
    {
        int r=q.front();
        ///cout<<r<<' '<<previ[r]<<'\n';
        if(r==0)
        {
            break;
        }
        q.pop();
        int r0=(r*10)%x;
        int r1=(r*10+1)%x;
        if(viz[r0]==0)
        {
            viz[r0]=1;
            previ[r0]=r;
            q.push(r0);
        }
         if(viz[r1]==0)
        {
            viz[r1]=1;
            previ[r1]=r;
            q.push(r1);
        }
    }
    reconst(0);
    return 0;
}