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; }

浙公网安备 33010602011771号