Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // For http://codereview.stackexchange.com/a/77129/58964
- // Profile with:
- // for ((i=0; i<100; i++)) ; do java FiboSmart ; done | grep 'Time used:' | sed 's/Time used: //' | sort -n | head -n 1
- public class FiboSmart {
- private static final long MAX_NUM = 4000000;
- private static final int RUNS = 100;
- public static void main(String[] args) {
- final long START = System.nanoTime();
- long result = 0;
- for (int i = 0; i < RUNS; i++)
- result = function1();
- //long even1 = 0, even2 = 0, even = 2;
- //while (even <= MAX_NUM) {
- // result += even;
- // even2 = even1;
- // even1 = even;
- // even = even1 * 4 + even2;
- //}
- final long END = System.nanoTime();
- final long TIME = (END - START) / RUNS;
- System.out.format("Result: %d%nTime used: %d%n", result, TIME);
- }
- public static long function1() {
- long result = 0;
- long odd1, odd2 = 1, even = 2;
- while (even <= MAX_NUM) {
- result += even;
- //empty();
- odd1 = even + odd2;
- odd2 = odd1 + even;
- even = odd2 + odd1;
- }
- return result;
- }
- public static void empty() {
- }
- public static long function2() {
- long result = 0;
- long prevPrevEven, prevEven = 0, even = 2;
- while (even <= MAX_NUM) {
- result += even;
- //empty();
- prevPrevEven = prevEven;
- prevEven = even;
- even = (even << 2) + prevPrevEven;
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement