分数拆分

#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{

	int k,m,n;
	cin>>k;
	for(m=k+1;m<=2*k;m++)
	{
		if(k*m%(m-k)==0)
		{
			n=k*m/(m-k);
			printf("1/%d=1/%d+1/%d \n",k,n,m);
		}
	}



}

}
数学分析。
1)	我们假设 m <= n ,因为 k 必然小于 m 和 n ,则有 k < m <= n 
2) 	1/k=1/m+1/n 转换为 n 的等式,为  n = km/(m-k)
3)	k 为输入,是已知数。我们要枚举 m 来获得 n 。
	因为 k < m <= n ,也就是 k < m <= km/(m-k) ,解得 k < m <= 2k 。
4)	因此我们程序要做的就是:
		枚举 m 的值为 [k+1,2k] 的一个【整数】,n = km/(m-k) 
		看是否能得到【整数解 n】 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值