又到了日常写水题环节....
感觉这题只有*1300....
题意:
给定N
问你存在多少个三元组(a,b,c),满足a*a=b+c且c*c=a*a+b*b
且满足1<=a<=b<=c<=N
思路:
看到a*a,a*b这种的应该直接想到数据范围直接变成根号
注意到a的范围最多sqrt(2e9)
注意要和N取min,不然会超时
枚举题,直接枚举a,b和c直接就出来了,check一下范围就好了....
Code:
#include <bits/stdc++.h>
//#define int long long
using namespace std;
const int mxn=1e2+10;
int N;
void solve(){
cin>>N;
int ans=0;
for(int a=1;a<=min(N,(int)sqrt(2e9));a++){
if((a*a)%2==0ll) continue;
int b=(a*a-1)/2;
int c=a*a-b;
//cout<<a<<" "<<b<<" "<<c<<'\n';
if(1<=a&&a<=b&&b<=c&&c<=N) ans++;
}
cout<<ans<<'\n';
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;cin>>__;
while(__--)solve();return 0;
}