import java.math.BigInteger; import java.util.Scanner; public class fib { class FibMod { BigInteger current = BigInteger.ONE.negate(); long a = 0; long b = 1; public long next() { current = current.add(BigInteger.ONE); if (current.equals(BigInteger.ZERO)) { return 0L; } else if (current.equals(BigInteger.ONE)) { return 1L; } else { long tmp = (a + b) % 1000000000000000000L; a = b; b = tmp; return b; } } } public void check(int n, int size) { FibMod fib = new FibMod(); long mod = (long) Math.pow(10, size); long maxRange = 15000L; if (size >= 3) { maxRange = 15 * (long) Math.pow(10, size - 1) + 1; } for (long i=0L; i<maxRange; i++) { long f = fib.next(); if (f > mod && (f - n) % mod == 0) { System.out.println(i); return; } } System.out.println("NIE"); } public static void main(String[] args) { int n, size; Scanner scanner = new Scanner(System.in); String input = scanner.next(); scanner.close(); n = Integer.valueOf(input); size = input.length(); fib f = new fib(); f.check(n, size); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | import java.math.BigInteger; import java.util.Scanner; public class fib { class FibMod { BigInteger current = BigInteger.ONE.negate(); long a = 0; long b = 1; public long next() { current = current.add(BigInteger.ONE); if (current.equals(BigInteger.ZERO)) { return 0L; } else if (current.equals(BigInteger.ONE)) { return 1L; } else { long tmp = (a + b) % 1000000000000000000L; a = b; b = tmp; return b; } } } public void check(int n, int size) { FibMod fib = new FibMod(); long mod = (long) Math.pow(10, size); long maxRange = 15000L; if (size >= 3) { maxRange = 15 * (long) Math.pow(10, size - 1) + 1; } for (long i=0L; i<maxRange; i++) { long f = fib.next(); if (f > mod && (f - n) % mod == 0) { System.out.println(i); return; } } System.out.println("NIE"); } public static void main(String[] args) { int n, size; Scanner scanner = new Scanner(System.in); String input = scanner.next(); scanner.close(); n = Integer.valueOf(input); size = input.length(); fib f = new fib(); f.check(n, size); } } |