o così o...
codice:
public class Utils { private static Pattern longPattern = Pattern.compile("^[-+]?[0-9]+$");
private static Pattern doublePattern = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$");
private static final String isNumRegex = "-?\\d+(\\.\\d+)?";
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 checkNumber(String number){
Pattern longPattern = Pattern.compile("^[-+]?[0-9]+$");
Pattern doublePattern = Pattern.compile("^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$");
if(!isNumeric(number)){
System.out.println("Attenzione numero inputato non valido (che cavolo scrivi!?)");
}
else if (longPattern.matcher(number).matches()) {
System.out.println(factorize(Long.parseLong(number)));
} else if (doublePattern.matcher(number).matches()) {
System.out.println("Attenzione il valore Double non è gestito!");
}
}
public static boolean isNumeric(String str)
{
return str.matches(isNumRegex);
}
public static void main(String[] args) {
checkNumber("3000") ;
checkNumber("10000000000001") ; //<---------- ERRORE10000000000001L
}
}