Napisałem funkcje, która:
a) dla danej liczby postaci (sqrt(a) tzn. pierwiastek z a) znajdzie okres rozwinięcia na ułamek łańcuchowy
b) Wykorzystuje ten algorytm do znalezienia rozwinięcia liczby sqrt(4729494) na ułamek łańcuchowy

  
    private int getPeriod(int x) 
    {
        System.out.print("[");
        // bez żadnej części ułamkowej
        int root = (int) Math.sqrt(x);

        // wyklucz doskonałe kwadraty (bez okresu)
        if (root * root == x) 
        {
            return 0;
        }

        // część całkowita sqrt (x) - a0
        int a = root;
        System.out.print(a);
        // użyjmy zmiennej licznika, aby zapisać to, co odejmujemy
        int numerator = 0; 
        int denominator = 1; 

        // policz, jak długo to trwa, zanim rozpocznie się kolejny okres
        int period = 0;
        System.out.print("; ");
 //zakońć, gdy po raz drugi zobaczymy ten sam tryplet (a, licznik, mianownik)
        // to dzieje się dokładnie wtedy, gdy == 2 * root
        while (a != 2 * root) 
        {
            //a1
            numerator = denominator * a - numerator;
            // must be integer divisions !
           //muszą to być dzielenia integer-owe
            denominator = (x - numerator * numerator) / denominator;
            a = (root + numerator) / denominator;
            System.out.print(a);
            if (a != 2 * root)
            {
              System.out.print(", ");
            }
              period++;
            
        }
        System.out.print("], ");
        return period;
             
    }
   

Moje pytanie jest czy taka zamiana jak poniżej jest wystarczająca aby w pełni wykorzystać funkcje pod kątem typu BigInteger czy też musze zamienić argument funkcji long x na zmienną typu BigInteger x aby mieć w pełni zmienioną funkcje z pierwszej na drugą. Głównie chodzi mi o zakres. Wiećpoprosiłbym o pomoc przy tym jeśli coś nie tak zrobiłem ponieważ dopiero zaczełem stosowac tą klasę BigInteger z biblioteki java.math.BigInteger.

static BigInteger period_1, denominator_1,numerator_1, root_1, x_1;

private BigInteger getPeriod(long x) 
    {
        System.out.print("[");
        // bez żadnej części ułamkowej
        root_1 = BigInteger.valueOf((long)Math.sqrt(x));

        // wyklucz doskonałe kwadraty (bez okresu)
        x_1=BigInteger.valueOf(x);
        if (root_1.multiply(root_1) == x_1) 
        {
            return BigInteger.ZERO;
        }

         // część całkowita sqrt (x) - a0
       BigInteger a = root_1;
        System.out.print(a);
       // użyjmy zmiennej licznika, aby zapisać to, co odejmujemy
         numerator_1 = BigInteger.ZERO; // initially zero, e.g. 4 will appear in second iteration of sqrt(23)
         denominator_1 = BigInteger.ONE; // initially one,  e.g. 7 will appear in second iteration of sqrt(23)

           // policz, jak długo to trwa, zanim rozpocznie się kolejny okres
        period_1 = BigInteger.ZERO;
        System.out.print("; ");
        BigInteger two = BigInteger.valueOf(2);
  //zakońć, gdy po raz drugi zobaczymy ten sam tryplet (a, licznik, mianownik)
        // that this happens exactly when a == 2 * root
        while (!a.equals(two.multiply(root_1))) 
        {
            //a1
            
            numerator_1 = denominator_1.multiply(a).subtract(numerator_1);
            // must be integer divisions !
            denominator_1 = (x_1.subtract(numerator_1.multiply(numerator_1))).divide(denominator_1);
            a = (root.add(numerator_1)).divide(denominator_1);
            System.out.print(a);
            if (!a.equals(two.multiply(root_1)))
            {
              System.out.print(", ");
            }
              period_1 = period_1.add(BigInteger.ONE);
            
        }
        System.out.print("], ");
        return period_1;
        
        
    }