CF1487D Pythagorean Triples 题解
一看就是推式子。
由题得
\[\begin{cases}c^2=a^2+b^2\\c=a^2-b\end{cases}
\]
将下面的式子代入上式得
\[(a^2-b)^2=a^2+b^2
\]
拆开,抵消,移项
\[a^4-2a^2b-a^2=0
\]
两边约去 \(a^2\)
\[a^2-1=2b
\]
\[a^2=2b+1
\]
因为 \(b \in N\),所以 \(a\) 是奇数。
再次代入得
\[c=a^2-b=2b+1-b=b+1
\]
所以对于每一个奇数 \(a\),都有且仅有一对 \((b,c)\) 满足条件。于是问题转化为 \(a\) 的数量。(当然,容易发现 \(a=1\) 时除外。)
由于 \(1 \le a \le b \le c = b+1 \le n\),所以 \(b\le n-1\)。
然后又因为 \(a^2=2b+1 \le 2n-1\),所以 \(a\le \sqrt{2n-1}\).。
又因为 \(a\) 是奇数且不为 \(1\),所以 \(a\) 的数量为 \(\dfrac{\sqrt{2n-1} -1}2\)。
个人觉得这题比 C 水。
关键代码:
long long n;cin>>n;
cout<<((int)sqrt(2*n-1)-1)/2<<endl;
我好菜啊。——ฅ(OωO)ฅ