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();
        }
    }
  • 相关阅读:
    vue--三种组件中之间的传值
    数学log的基本知识
    通俗易懂理解——dijkstra算法求最短路径
    数据结构--Dijkstra算法最清楚的讲解
    explorer.exe
    经典树与图论(最小生成树、哈夫曼树、最短路径问题---Dijkstra算法)
    WPF路由事件二:路由事件的三种策略
    luogu P1979 华容道
    4.Linux查看文件大小的几种方法
    Pairing heap
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13396275.html
Copyright © 2011-2022 走看看