其他分享
首页 > 其他分享> > CF1487D Pythagorean Triples(思维)

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
那么我们就有如下对应关系

c2c-1sqrt(2c-1)
13255
×164
593
×42
×11

根据上表可知先由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