牛客練習試合51 c-勾股定理

1451 ワード

ストライクの定理
输送门
タイトルの説明
直角三角形の1つの辺の長さnを与えて、あなたの任務は残りの2つの辺を構築して、この3つの辺が1つの直角三角形を構成することができます.
説明の入力
整数n.
出力の説明
他の2つの辺b,c.答えは一意ではありません.いずれかのグループを出力するのが合理的であれば、構築できない場合は-1を出力します.

入力
3
しゅつりょく
4 5
問題を解く構想.
1.入力数が0,1,2の場合、勾配数が見つからず、直接-1を出力しやすい.2.正解のセットを出力するだけなので、入力した数aを直角エッジとして設定して、斜辺と直角エッジを出力します.a 2 a^2 a 2=c 2 c^2 c 2 c 2 c 2−b 2 b^2 b 2二乗差式を用いてa 2 c−bdfrac{a^2}{c−b}c−b−ba2=c+b c+b c+b c+b c+b(1):c−b=1 c−b=1 c−b=1 c−b=1をまず考慮するとa 2=c+b=>b=b=a 2−1 2−1 a^2=c+b+b=c+b+bqquad=>qquad b=dfrac{ a^2−{2}a 2=c+b==b===2 b=baaa=2 b=2 b=2 b=baaa=2 b=2 b=2 2−1同理c=a 2−1 2+1 c=dfrac{a^2−1}{2}+1 c=2 a 2−1+1 a,b,c a,b,c a,b,cはいずれも整数であるため(a 2−1)(a^2−1)(a 2−1)%2=0であり、a a aが奇数であることが証明されるので、a a aが奇数である限り、b,c b,c b,c cは上記の式である.(2):次にaが偶数であることを考慮すると,(c−b)(c−b)(c−b)%2=0を考慮するだけで,簡単にするためにc−b c−b c−b=2を考慮することができる.同理由の二乗差式は,a 2=2(c+b)a^2=2(c+b)a 2=2(c+b)既:b=a 2 4−1 c=a 2 4+1 b=dfrac{a^2}{4}−1qquad c=dfrac{a^2}{4}+1 b=4 a 2−1 c=4 a 2+1得られるa 2 a^2 a 2が必ず4の倍数であり,偶数の場合を示す
ACコード
#include
long long a,b,c;
int main()
{
    scanf("%lld",&a);
    if(a==0||a==1||a==2)
        {
            printf("-1");
            return 0;
        }
    if(a%2==1)
        {
            b=(a*a-1)/2;
            c=b+1;
        }
    if(a%2==0)
        {
            b=((a*a)/2-2)/2;
            c=b+2;
        }
    printf("%lld %lld",b,c);
    return 0;
}