Educational Codeforces Round 104 (Rated for Div. 2) D. Pythagorean Triples 数学

D. Pythagorean Triples

在这里插入图片描述

input

3
3
6
9

output

0
1
1

solution

c 2 = a 2 + b 2   ( i ) c^2=a^2+b^2~(i) c2=a2+b2 (i)

c = a 2 − b   ( i i ) c=a^2-b~(ii) c=a2b (ii)

= > c 2 − b = b 2 + b =>c^2-b=b^2+b =>c2b=b2+b

= > c = b + 1 =>c=b+1 =>c=b+1

= > b = a 2 − 1 2 , c = a 2 + 1 2 =>b=\frac{a^2-1}{2},c=\frac{a^2+1}{2} =>b=2a21c=2a2+1

统 计 1 统计1 1 ~ n 中 满 足 ( i ) , ( i i ) 的 值 , 通 过 c = a 2 + 1 2 来 作 为 上 限 值 n中满足(i),(ii)的值,通过c=\frac{a^2+1}{2}来作为上限值 n(i)(ii)c=2a2+1

code

//Siberian Squirrel
//#include<bits/stdc++.h>
#include<unordered_map>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>

#define ACM_LOCAL

using namespace std;
typedef long long ll;

const double PI = acos(-1);
const double eps = 1e-7;
const int MOD = 3221225473;
const int N = 5e6 + 10;
const int UP = 1e4;

inline ll solve(int n, ll res = 0) {
    
    
    for (int i = 3; (1ll * i * i + 1) / 2 <= n; i += 2) {
    
    
        res ++;
    }
    return res;
}

int main() {
    
    
#ifdef ACM_LOCAL
    freopen("input", "r", stdin);
    freopen("output", "w", stdout);
#endif
    int o = 1, n, m, x, y;
    scanf("%d", &o);
    while(o --) {
    
    
        scanf("%d", &n);
        printf("%lld\n", solve(n));
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_46173805/article/details/113920986