CodeForces 707C Pythagorean Triples(数学题)

来源:互联网 发布:天猫淘宝虎彪旗舰店 编辑:程序博客网 时间:2024/05/17 22:00

传送门:http://codeforces.com/problemset/problem/707/C
题目大意:输入一个整数,求另外两个数,使得这三个数为边的三角形是直角三角形。
题目分析:
百度到了勾股数的构造方法:
首先1和2是构造不出来的,
对≥3的数n:
若n为奇数,则n212n2+12是勾股数。
若n为偶数,则n241n24+1是勾股数。

证明很简单,直接平方和一下就行了。不过怎么想到的呢?我自己试着猜测了一下,大概是由平方差公式的变形(2n+1)2(2n1)2=4n推过来的。如果n是奇数直接把4除过去就行了,如果n是偶数的话(2n+1)2/2是小数,所以把2n看做一个整体,换元一下就出来了。

代码就随便看看吧,有了上述公式,学过最基本编程的人都会写。

#include <bits/stdc++.h>typedef long long ll;using namespace std;int main() {  ll a;  scanf("%I64d", &a);  if(a<3)    printf("-1\n");  else {    if(a&1)      printf("%I64d %I64d\n",(a*a-1)/2, (a*a+1)/2);    else      printf("%I64d %I64d\n", a*a/4-1, a*a/4+1);  }}
0 0