Cod sursa(job #1900147)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 3 martie 2017 10:28:29
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<bits/stdc++.h>
#define lsb(i) (i&(-i))
using namespace std;
int dp[(1<<20)+5],a,b,m,pwr[25],loga[(1<<20)+5],l,v[25],dv=0;
int cmmmc(int a,int b)
{
    int x=a,y=b;
    int r=a%b;
    while(r)
    {
        a=b;b=r;
        r=a%b;
    }
    return ((x*y)/b);
}
int main()
{
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    scanf("%d%d",&a,&b);
    m=cmmmc(a,b);
    dp[0]=0;
    pwr[0]=1;
    for(int i=1;i<=20;i++)
    {
        pwr[i]=(pwr[i-1]*10)%m;
    }
    loga[1]=0;
    for(int i=1;i<=(1<<20);i++)
    {
        loga[i]=loga[i>>1]+1;
    }
    for(int mask=1;mask<=(1<<20);mask++)
    {
        l=lsb(mask);
        dp[mask]=(dp[mask-l]+pwr[loga[l]])%m;
    }
    for(int mask=1;mask<=(1<<20);mask++)
    {
        if(!dp[mask])
        {
            m=mask;
            while(m)
            {
                v[++dv]=m%2;
                m/=2;
            }
            reverse(v+1,v+dv+1);
            for(int i=1;i<=dv;i++) printf("%d",v[i]);
            return 0;
        }
    }
    return 0;
}