NJUOJ 上机7 题目8

#include <iostream>
#define N 0
#define M 1
int f[2][100] = { 0 };
int c[2][100] = { 0 };
void factor(int num, int pos)
{
    int facs = 0;
    for (int i = 2; i <= num; i++)
    {
        if (num%i == 0)
        {
            int j = 0;
            for (j = 0; f[pos][j] != 0; j++)
            {
                if (f[pos][j] == i)
                {
                    c[pos][j] += 1;
                    break;
                }
            }
            if (j == facs)
            {
                f[pos][facs] = i;
                c[pos][facs] = 1;
                facs += 1;
            }
            num /= i;
            i = 1;
        }
    }
}
using namespace std;
int main()
{
    int n, m;
    cin >> n >> m;
    if (m < n)
    {
        cout << -1;
        return 0;
    }
    factor(n, N);
    factor(m, M);
    //for (int j = 0; f[N][j] != 0; j++) cout << f[N][j] << " " << c[N][j] << endl;
 
    int flag = 1,i;
    for (i = 0; f[M][i]!=0 && f[N][i] != 0; i++)
    {
        if (f[N][i] != f[M][i])
        {
            flag = 0;
            break;
        }
    }
    if (f[N][i] != f[M][i]) flag = 0;
 
    if (flag)
    {
        int max = -1;
        for (i = 0; f[M][i] != 0; i++) //N, M is the same.
        {
            int count = 0;
            while (c[N][i] < c[M][i])
            {
                c[N][i] *= 2;
                count++;
            }
            if (count > max) max = count;
        }
        cout << max;
    }
    else
        cout << -1;
    return 0;
}

 

posted on 2017-11-09 19:18  Ricochet!  阅读(222)  评论(0)    收藏  举报