Cod sursa(job #1883200)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 17 februarie 2017 20:03:10
Problema Multiplu Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>
#define C 31
int v[2000001],m[31],rez[31];
int rest(int ct,int nr)
{
    int i,z;
    i=ct;
    z=0;
    while(i<C && z<nr){
        z=z*10+v[i];
        i++;
    }
    z=z-z/nr*nr;
    while(i<C)
    {
        i++;
        z=z*10+v[i];
        z=z-z/nr*nr;
    }
    return z;
}
int main()
{
    int a,b,aa,bb,r,i,s,cmmmc,j;
    freopen("multiplu.in","r",stdin);
    freopen("multiplu.out","w",stdout);
    scanf("%d%d",&a,&b);
    aa=a;
    bb=b;
    while(b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    cmmmc=(aa*bb)/a;
    for(i=C-1; i>0; i--)
    {
        v[i]=1;
        m[i]=rest(i,cmmmc);
        if(m[i]==0)
            m[i]=cmmmc;
        v[i]=0;
    }
    s=0;
    v[0]=1;
    for(i=C-1; i>0 && !v[cmmmc]; i--)
        for(j=cmmmc; j>=0 && !v[cmmmc]; j--)
            if(v[j] && !v[(j+m[i]-1)%cmmmc+1])
                v[(j+m[i]-1)%cmmmc+1]=v[j]+(1<<(C-1-i))-(j==0);
    i=0;
    s=v[cmmmc];
    while(v[cmmmc])
    {
        i++;
        rez[i]=v[cmmmc]%2;
        v[cmmmc]/=2;
    }
    while(i)
    {
        printf("%d",rez[i]);
        i--;
    }

    return 0;
}