1. 程式人生 > >數學【CF743C】Vladik and fractions

數學【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));
}