Cod sursa(job #115574)

Utilizator TabaraTabara Mihai Tabara Data 16 decembrie 2007 12:59:49
Problema Multiplu Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasa a 10-a Marime 1.37 kb
#include <stdio.h>

#define in "multiplu.in"
#define out "multiplu.out"

#define NMAX 200000000

using namespace std;
typedef int INT;

INT cmmdc( INT a, INT b )
{
    INT k = 0;
    if ( a == 0 ) return b;
    if ( b == 0 ) return a;
    while ( (a&1) == 0 && (b&1) == 0 )
    {
          a >>= 1;
          b >>= 1;
          k++;
    }
    while ( a != b )//cel putin unul este impar
    {
          if ( (a&1) == 0 )
          {
               a >>= 1;
          }
          else if ( (b&1) == 0 )
          {
               b >>= 1;
          }
          //amandoua impare
          else if ( a > b )
          {
               a = (a-b) >> 1;
          }
          else b = (b-a) >> 1;//diferenta lor este un numar par
    }
    return a << k;
}

int A, B;

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );

    scanf( "%d %d", &A, &B );  
    
    INT val = cmmdc(A,B);
    val = A / val * B;
    int i;
    
    for ( i = 1; i < 100; ++i )
    {
        INT x = val;
        x *= i;
        bool ok = true;
        while ( x )
        {
              int cif = x % 10;
              if ( cif >= 2 ) 
              {  
                   ok = false;
                   break;
              }
              x /= 10;
        }
        if ( ok == true ) printf( "%ld\n", val*i);
    }
    return 0;
}