标签:25 Triples int sqrt 这道题 a2 Pythagorean 2c CF1487D
题目传送门
这道题其实就是给你一个数让你计算出从1到这个数之间同时满足:
① 1<=a<=b<=c<=n
② c=a2-b
③ c2=a2+b2
的这三个数字的组合数。
那么这道题先推公式:
由②式和③式可以得出:c-b=1
带回②式就得到:a2=2c-1
a是从1,2,3,4,5……依次递增的,因此对2c-1进行开方.我们举个例子:
假设输入的数据为13
那么2c-1=25
sqrt(25)=5
那么我们就有如下对应关系
c | 2c-1 | sqrt(2c-1) |
---|---|---|
13 | 25 | 5 |
× | 16 | 4 |
5 | 9 | 3 |
× | 4 | 2 |
× | 1 | 1 |
根据上表可知先由sqrt(2c-1)确定a的最大值,那么就可以找到2c-1,由2c-1就可以找到c的值,又因为2c-1一定是奇数,所以我们只需要找a当中不为1的奇数的个数就是答案!
以下是代码实现
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,p;
cin>>t;
while(t--){
cin>>p;
cout<<((int)sqrt(2*p-1)-1)/2<<endl;
}
return 0;
}
标签:25,Triples,int,sqrt,这道题,a2,Pythagorean,2c,CF1487D 来源: https://blog.csdn.net/m0_51841071/article/details/113831399
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。