CF1487D Pythagorean Triples(思维)
作者:互联网
题目传送门
这道题其实就是给你一个数让你计算出从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