数学【CF743C】Vladik and fractions

Description

请找出一组合法的解使得\(\frac {1}{x} + \frac{1}{y} + \frac {1}{z} = \frac {2}{n}\)成立 其中\(x,y,z\)为正整数并且互不相同

Input

一个整数\(n\)

Output

一组合法的解\(x, y ,z\),用空格隔开 若不存在合法的解,输出\(-1\)

首先,最先容易想到的是令\(x,y,z\)其中一个数为\(n\),那么我们现在的问题就变成了求解这个式子。

\[\frac{1}{x}+\frac{1}{y}=\frac{1}{n} \]

如果你是一个学过高中数学的人,

你会发现,这可以裂项(是叫这个吧?喵喵喵?)

\[\frac{1}{n}=\frac{1}{n+1}+\frac{1}{n(n+1)} \]

按照常理来说,一般人都会证明一下,但是我不会证明啊!!

所以其实刚开始我没有意识到是裂项

然后,先观察样例。

\(n=7\)的时候三个解分别为\(7,8,56\),嗯?暗示着我什么?

接下来代入\(n,n+1.n(n+1)\)到式子中,貌似是正解?

交上去Wa了?,结果发现没有判断无解。

无解条件:$n=1 \(或\)n=0$

如果\(n=1\)的时候的话,显然,三个以整数为分母(且互不相同),分子为\(1\)的分数,相加不可能大于等于\(2\)

最大是\(1+\frac{1}{2}+\frac{1}{3}\)

还有\(n=0\),这个分数无意义,还求什么解。

代码

#include<cstdio>
#define lo long long
#define R register

using namespace std;

lo n;
int main()
{
	scanf("%lld",&n);
	if(n==1 or n==0)puts("-1");
	else printf("%lld %lld %lld",n,n+1,n*(n+1));
}
posted @ 2018-11-08 09:39  顾z  阅读(333)  评论(0编辑  收藏  举报