欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > D. Pythagorean Triples 题解

D. Pythagorean Triples 题解

2025/10/31 13:11:55 来源:https://blog.csdn.net/qq_39804992/article/details/147712378  浏览:    关键词:D. Pythagorean Triples 题解

思路

由勾股定理和题目中的要求对应的两个方程可以得到一个等式:

c方-b方 = c + b

在题目要求下可以知道 c = b+1

拿这个式子去打表,找符合这个式子的直角三角形

import math
for i in range(1,1001):a = ib = i+1a = a*ab = b*bc = b-ad = math.sqrt(c)d = int(d)if d*d == c:print(f"{d} {i} {i+1}")
# 3 4 5
# 5 12 13
# 7 24 25
# 9 40 41
# 11 60 61
# 13 84 85
# 15 112 113
# 17 144 145
# 19 180 181
# 21 220 221
# 23 264 265
# 25 312 313
# 27 364 365
# 29 420 421
# 31 480 481
# 33 544 545
# 35 612 613
# 37 684 685
# 39 760 761
# 41 840 841
# 43 924 925

从打表结果可以发现,符合要求的三角形满足:

1、a是奇数,且除了1以外的每个正奇数都有对应的符合要求的直角三角形

2、c = b+1

3、b = (a*a-1)/2

因为题目中是求1-n范围中有多少个符合要求的三角形,所以从n开始倒着找,找到的第一个符合要求的三角形的  a/2  即为答案

AC代码 

为什么从python变成c艹了,因为用python交了超时

#include<bits/stdc++.h>
using namespace std;#define int long longint n,t,z,m;void solve(){cin>>n;if(n<5){cout<<0<<'\n';return ;}for(int i=n;i>0;--i){z = (i-1)*2+1;t = sqrt(z);if(t*t==z && t&1){cout<<(t>>1)<<'\n';return ;}}
}signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int _=1;cin>>_;while(_--){solve();}    return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词