For the second part :
Also why this implementation keeps giving me stackoverflow(again no idea for which inputs)?
Try this input set : 
5
3 1 16 5 10
It will give you the stackoverflow error. For your given code in pastebin.
Why ? 
If the input is '1' there will be this problem. 
edit your code part like below and see the out put for input (1 1). 
public static int divisor(int m, int n) {
    System.out.println("### "+m+" "+n);
    if (m == 0 || n == 0) {
        return m + n;
    } else if (m > n) {
        return divisor(n, m % n);
    } else {
        return divisor(m, n % m);
    }
}
in some point out put will be like this : 
.
.
### 1 1134903170
### 1 0
### 1 1836311903
### 1 0
### 1 -1323752223
### -1323752223 1
### -1323752223 1
### -1323752223 1
.
.
because in your code the function calling is like below. 
   public static int divFib(int num) {
    int i = 1, j = 2, temp;
    while (divisor(num, j) == 1) {
        temp = j;
        j = j + i;
        i = temp;
    }
    return j;
   }
divisor(num, j) will be called like divisor(1, 2) then below part will execute 
else {
        return divisor(m, n % m);
    }
the calling will  be like divisor(1,0)  because n%m = 2%1 =0 
then '1' will  be return as (m+n = 1).
then  while (divisor(num, j) == 1){} will  execute again and 'j' will be get increased. But 'num' is '1'. the same thing happens again and again. resulting 'j' to be a huge number and eventually it will assigned a negative number. (I think  you know why its happening).
The thing is this will not ever stopped. so the stack will be overflowed due to huge number of function calls. 
I think this is a quite clear explanation and if you have any doubt please ask. 
(Sorry i mistakenly post the answer here.)