18444 分数拆分

Description

参考(28条消息) SCAU 计算智能 暴力美学(三)_大头鸡的博客-CSDN博客 

输入正整数k(k<=1000),将1/k变为不少于2项,但不多于3项的1/(xi)之和,xi为正整数,且i表示序号

注:请使用long long



 

输入格式

多case,一行一个整数k

最后一行是0


 

输出格式

对每一个case,按等式最右边一项分母,由小到大排序输出满足条件的等式,最右边一项分母相同,则按最右边第二项,依次类推

每一个case完成后,输出一个空行(没有满足的等式时,也要输出该空行)


 

输入样例

2
3
4
0


 

输出样例

1/2=1/6+1/3
1/2=1/42+1/7+1/3
1/2=1/24+1/8+1/3
1/2=1/18+1/9+1/3
1/2=1/15+1/10+1/3
1/2=1/12+1/12+1/3
1/2=1/4+1/4
1/2=1/20+1/5+1/4
1/2=1/12+1/6+1/4
1/2=1/8+1/8+1/4
1/2=1/10+1/5+1/5
1/2=1/6+1/6+1/6

1/3=1/12+1/4
1/3=1/156+1/13+1/4
1/3=1/84+1/14+1/4
1/3=1/60+1/15+1/4
1/3=1/48+1/16+1/4
1/3=1/36+1/18+1/4
1/3=1/30+1/20+1/4
1/3=1/28+1/21+1/4
1/3=1/24+1/24+1/4
1/3=1/120+1/8+1/5
1/3=1/45+1/9+1/5
1/3=1/30+1/10+1/5
1/3=1/20+1/12+1/5
1/3=1/15+1/15+1/5
1/3=1/6+1/6
1/3=1/42+1/7+1/6
1/3=1/24+1/8+1/6
1/3=1/18+1/9+1/6
1/3=1/15+1/10+1/6
1/3=1/12+1/12+1/6
1/3=1/21+1/7+1/7
1/3=1/12+1/8+1/8
1/3=1/9+1/9+1/9

1/4=1/20+1/5
1/4=1/420+1/21+1/5
1/4=1/220+1/22+1/5
1/4=1/120+1/24+1/5
1/4=1/100+1/25+1/5
1/4=1/70+1/28+1/5
1/4=1/60+1/30+1/5
1/4=1/45+1/36+1/5
1/4=1/40+1/40+1/5
1/4=1/12+1/6
1/4=1/156+1/13+1/6
1/4=1/84+1/14+1/6
1/4=1/60+1/15+1/6
1/4=1/48+1/16+1/6
1/4=1/36+1/18+1/6
1/4=1/30+1/20+1/6
1/4=1/28+1/21+1/6
1/4=1/24+1/24+1/6
1/4=1/140+1/10+1/7
1/4=1/42+1/12+1/7
1/4=1/28+1/14+1/7
1/4=1/8+1/8
1/4=1/72+1/9+1/8
1/4=1/40+1/10+1/8
1/4=1/24+1/12+1/8
1/4=1/16+1/16+1/8
1/4=1/36+1/9+1/9
1/4=1/18+1/12+1/9
1/4=1/20+1/10+1/10
1/4=1/15+1/12+1/10
1/4=1/12+1/12+1/12

分析:

枚举x,y,z。

z从k+1到3*k。

拆成两项z要特判,z<=2*k。

中间项p

y=p+1到2*p+1

拆成3项y要特判,y>=z

注意%lld

#include

typedef long long ll;

int main() {
	ll k;
	while(scanf("%lld",&k)&&k){
		ll x,y,z,p;
		for(z=k+1;z<=3*k;++z){
			p=z*k/(z-k);
			if(z<=2*k&&z*k%(z-k)==0){
				printf("1/%lld=1/%lld+1/%lld\n",k,p,z);
			}
			ll t1=z*k;
			ll t2=z-k;
			for(y=p+1;y<=2*p+1;++y){
				x=t1*y/(t2*y-t1);
				if(y>=z&&t1*y%(t2*y-t1)==0){
					printf("1/%lld=1/%lld+1/%lld+1/%lld\n",k,x,y,z);
				}
			}
		}
		printf("\n");
	}
	return 0;
}

你可能感兴趣的:(scau计算智能,算法)