zoukankan      html  css  js  c++  java
  • HDU4145 A Simple Problem 简单数论

    这题给定一个N,求最小的x^2满足y^2 = x^2 + N;

    将x^2移到左边,得到(y+x)*(y-x) = N,于是我们分解N成两个约数相乘的形式,于是我们从sqrt(N)到1开始枚举约数,得到可以相除的约数对(a, b)后,直接计算abs((a-b) / 2)就是x的值了,当然x不能为零,并且a,b的奇偶性要一致。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<set>
    #include<map>
    #include<cstring>
    #include<vector>
    #include<string>
    #define LL long long
    using namespace std;
    
    int N;
    
    int main()
    {
        int T, ret;
        scanf("%d", &T);
        while (T--) {
            scanf("%d", &N);
            ret = -1;
            int LIM = (int)sqrt(double(N));
            for (int i = LIM; i >= 1; --i) {
                if (N % i == 0) {
                    if ((i & 1) ^ ((N/i) & 1)) {
                        continue;
                    }
                    else if (i - N/i){
                        ret = abs((i - N/i) / 2);
                        break;
                    }
                }
            }
            printf("%d\n", ret);
        }
        return 0;
    }
  • 相关阅读:
    hdu 1240 Asteroids!
    hdu 1253 胜利大逃亡
    hdu 1035 Robot Motion
    hdu 1181 变形课
    hdu 1548 A strange lift
    DFS Sum It Up
    hdu 3278 Catch That Cow
    hdu 1312 Red and Black
    ACM菜鸟
    eclipse新建安卓项目点击finish后窗口无法关闭
  • 原文地址:https://www.cnblogs.com/Lyush/p/2721853.html
Copyright © 2011-2022 走看看