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
    }
}