计蒜客 Half-consecutive Numbers 暴力打表找规律

来源:互联网 发布:云计算课程经典教材 编辑:程序博客网 时间:2024/05/21 00:31

The numbers 113366101015152121282836364545 and t_i=\frac{1}{2}i(i+1)ti=21i(i+1), are called half-consecutive.

For given NN, find the smallest rr which is no smaller than NN such that t_rtr is square.

Input Format

The input contains multiple test cases.

The first line of a multiple input is an integer TT followed by TT input lines.

Each line contains an integer N~(1\le N\le 10^{16})N (1N1016).

Output Format

For each test case, output the case number first.

Then for given NN, output the smallest rr.

If this half-consecutive number does not exist, output -11.

样例输入

412950

样例输出

Case #1: 1Case #2: 8Case #3: 49Case #4: 288

题目来源

2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛

打表找规律

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.math.BigInteger;import java.util.HashSet;import java.util.Set;import java.util.StringTokenizer;public class Main {        public static void main(String[] args) {        new Task().solve();    }}class Task {    InputReader in = new InputReader(System.in) ;    PrintWriter out = new PrintWriter(System.out) ;        void solve(){    /*for(long i = 1 ; i <= 100000000L ; i++){    long x =  i*(i+1)/2 ;    long y = (long)Math.sqrt(x + 0.5) ;    if(y * y == x){    System.out.println(i + " " + x + " " + y) ;    }      }*/    long[] a = new long[26] ;    long[] b = new long[26] ;    long[] r = new long[26] ;    a[0] = 1 ;    b[0] = 1 ;    r[0] = 1 ;    for(int i = 1 ; i < 26 ; i++){    a[i] = a[i-1] + b[i-1] ;    b[i] = a[i-1] + a[i] ;    r[i] = b[i] * b[i] + ((i%2==0) ? 0 : -1) ;    }    int cas = 1 ;    int t = in.nextInt() ;    while(t-- > 0){    long n = in.nextLong() ;     for(int i = 0 ; i < 26 ; i++){    if(r[i] >= n){    out.println("Case #" + (cas++) + ": " + r[i]) ;    break ;    }    }    }    out.flush() ;     }    }class InputReader {        public BufferedReader reader;        public StringTokenizer tokenizer;            public InputReader(InputStream stream) {            reader = new BufferedReader(new InputStreamReader(stream), 32768);            tokenizer = new StringTokenizer("");        }        private void eat(String s) {            tokenizer = new StringTokenizer(s);        }            public String nextLine() {             try {                return reader.readLine();            } catch (Exception e) {                return null;            }        }            public boolean hasNext() {            while (!tokenizer.hasMoreTokens()) {                String s = nextLine();                if (s == null)                    return false;                eat(s);            }            return true;        }            public String next() {            hasNext();            return tokenizer.nextToken();        }            public int nextInt() {            return Integer.parseInt(next());        }            public int[] nextInts(int n) {            int[] nums = new int[n];            for (int i = 0; i < n; i++) {                nums[i] = nextInt();            }            return nums;        }            public long nextLong() {            return Long.parseLong(next());        }            public double nextDouble() {            return Double.parseDouble(next());        }            public BigInteger nextBigInteger() {            return new BigInteger(next());        }        }    



阅读全文
0 0
原创粉丝点击