E' un pò farraginoso e sarebbe un metodo che fattorizza un numero di tipo long stampandone a video i fattori primi.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 } }
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?