codice:
import java.util.Arrays;


public class Utils {
    
    public static boolean isPrime(long n){
        if(n==1) return false;
        int[] array = new int[0];
        for(int i=1; i<=n; i++){
            if( n% i == 0){
                array = Arrays.copyOf(array, array.length+1);
                array[array.length-1] = i;
            }
        }return (array[0] == 1 && array[1] == n);
    }
    
    public static String factorize(long d){
        long[] array = new long[0];
        long[] arrayNoRepeat = new long[0];
        long valore = d;
        String s ="";
    while(true){
        if(valore == 1) break;
        int i=2;
        while(i<=valore){
            if( valore % i ==0 && isPrime(i)){
                array = Arrays.copyOf(array, array.length+1);
                array[array.length-1] = i;
                valore = valore/i;
                break;
            }
            i++;
        }
    } for(int j=0; j<array.length; j++){
        
        if (Arrays.binarySearch(arrayNoRepeat, array[j])<0){
        arrayNoRepeat = Arrays.copyOf(arrayNoRepeat, arrayNoRepeat.length+1);
        arrayNoRepeat[arrayNoRepeat.length-1] = array[j];}
    }

    
    for(int x=0; x<arrayNoRepeat.length; x++){
        int counter = 0;
        for(int y=0; y<array.length; y++){
            if(arrayNoRepeat[x] == array[y]) counter++;
        }
        s+= counter > 1 ? arrayNoRepeat[x]+"("+counter+")" : " "+arrayNoRepeat[x]+" ";
    }
    return s;
    }

    public static void main(String[] args) {
        System.out.println(factorize(3000));
        System.out.println(factorize(10000000000001)); //<---------- ERRORE
    }
}
E' un pò farraginoso e sarebbe un metodo che fattorizza un numero di tipo long stampandone a video i fattori primi.
Quando provo a fattorizzare 10000000000001 giustamente non entra nell'intervallo di rappresentazione degli int. Ho provato ad effettuare il casting di tutti gli array, ma il problema sono i cicli for. E' possibile iterare nel for su variabili long?