Codeforces371B

题意:两只小熊有俩块质量可能不同的奶酪,小熊们都想得到更大快的奶酪,于是,准备打架,这时,狐狸来了说:“我来帮你们平分奶酪,假如其中一块奶酪分成2份,我拿一半的(1份),假如其中一块奶酪分成3份,我拿三分之二,假如其中一块奶酪分成5份,我拿五分之四,我会拿其中的一些奶酪”,小熊为平分奶酪只好接收了狐狸意见。

输入数据给出a,b,代表两块奶酪质量,假如狐狸无法平分奶酪,则输出-1,能够平分奶酪,请输出最小操作(分割奶酪)次数。

解题:首先,求出a和b最大公约数t,并且将a和b除去t,假如最后能够分成,那么最后俩只小熊各自会拿到t克奶酪,接着不断让a和b多次除去2、3、5,每一次除操作加1到不能再除为止,假如最终a!=0 or b!=0证明狐狸骗熊,无法平分,否则能够平分输出最小操作数。

#include<stdio.h>
int ans;
int gcd(int a,int b)
{
    return b?gcd(b,a%b):a;
}
int chu(int x,int y)
{
    while(x%y==0)
    {
        ans++;
        x/=y;
    }
    return x;
}
int main()
{
    int i,j,a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        ans=0;
        if(a==b)
        {
            puts("0");
            continue;
        }
        int t=gcd(a,b);
        a/=t;b/=t;
        a=chu(a,2);
        a=chu(a,3);
        a=chu(a,5);
        b=chu(b,2);
        b=chu(b,3);
        b=chu(b,5);
        if(a==1&&b==1)
            printf("%d\n",ans);
        else
            puts("-1");
    }
    return 0;
}

 

posted @ 2013-12-25 21:12  CrazyForAC  阅读(158)  评论(0)    收藏  举报