Cod sursa(job #1415113)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 3 aprilie 2015 19:43:18
Problema Multiplu Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 2000000
int v[MAXN],prev[MAXN];
char vf[MAXN],cif[MAXN],nr[MAXN];
int main(){
    FILE*fi,*fout;
    int i,b,e,cmmmc,a1,b1,a,r,j;
    fi=fopen("multiplu.in" ,"r");
    fout=fopen("multiplu.out" ,"w");
    fscanf(fi,"%d%d" ,&a,&b);
    a1=a;b1=b;
    while(b>0){
        r=a%b;
        a=b;
        b=r;
    }
    cmmmc=(a1*b1)/a;
    b=e=0;
    v[b]=vf[1]=cif[b]=1;
    prev[b]=-1;
    do{
        if(vf[(v[b]*10)%cmmmc]==0){
            e=(e+1)%MAXN;
            v[e]=(v[b]*10)%cmmmc;
            vf[(v[b]*10)%cmmmc]=1;
            prev[e]=b;
            cif[e]=0;
        }
        if(vf[(v[b]*10+1)%cmmmc]==0){
            e=(e+1)%MAXN;
            v[e]=(v[b]*10+1)%cmmmc;
            vf[(v[b]*10+1)%cmmmc]=1;
            prev[e]=b;
            cif[e]=1;
        }
        b=(b+1)%MAXN;
    }while(v[b]%cmmmc>0);
    j=0;
    while(b>=0){
        nr[j++]=cif[b];
        b=prev[b];
    }
    for(i=j-1;i>=0;i--)
        fprintf(fout,"%d" ,nr[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}