zoukankan      html  css  js  c++  java
  • HDU

    给定一个素数p ,问是否存在两个数的里方差就是p

    p<=1e12

    经过简单的数学推导,可以很快想到只要 方程 3 * b *b + 3 * b + 1 - p = 0 关于b有解即可。

    简单的想法就是二分

    但是问题是b*b要爆long long,咋办呢?

    java呗

    import java.math.BigInteger;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.StreamTokenizer;
    import java.math.*;
    import java.io.*;
    import java.util.Scanner;
    import static java.lang.System.out;
    import static java.lang.Math.*;
    
    
    import java.util.*;
    import java.math.BigInteger;
    
    
    
    public class Main {
        /*
        static BigInteger quickPower(BigInteger a, BigInteger b) {
            BigInteger base  = a;
            BigInteger ans = BigInteger.ONE;
            while(b.compareTo(BigInteger.ZERO) > 0){
                if(b .and(BigInteger.ONE).equals(BigInteger.ONE)) ans = ans.multiply(base);
                base = base.multiply(base);
                b = b.divide(BigInteger.valueOf(2));
            }
            return ans;
        }*/
        public static void main(String[] args) {
           Scanner in = new Scanner (System.in);
           int T;
           BigInteger p;
           T = in.nextInt();
           while(T-- > 0){
                p = in.nextBigInteger();
                BigInteger l =  p.multiply(BigInteger.valueOf(-1)), r = p;
                int f = 0;
                while(r.compareTo(l) > 0){
                    BigInteger mid = l.add(r);
                    mid = mid.divide(BigInteger.valueOf(2));
                    BigInteger tmp = mid.multiply(mid).multiply(BigInteger.valueOf(3));
                    tmp = tmp.add(mid.multiply(BigInteger.valueOf(3)));
                    tmp = tmp.add(BigInteger.ONE);
                    if(tmp.compareTo(p) == 0) {
                        f = 1;
                        break;
                    }
                    if(tmp.compareTo(p) > 0) r = mid;
                    else l = mid.add(BigInteger.ONE);
                }
                if(f == 0) System.out.println("NO");
                else System.out.println("YES");
           }
           in.close();
        }
    }
  • 相关阅读:
    JavaScript 中正则匹配时结果不一致的问题
    /dev/null
    Xcode 中通过 target 运行多个 c 程序
    Xcode 调试时打印变量值
    Recoil 请求的刷新之使用随机参数
    npm ci 与 install 的区别
    项目中私有 npm 源的设置
    Crontab 的使用
    Nest 在日志中打印对象
    配置 ESLint 自动格式化自闭合标签(Self closing tag)
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13396275.html
Copyright © 2011-2022 走看看