public TreeSet<Long> getFactorsSet(Long b){
		ArrayList<Long> lcm = new ArrayList<Long>();
		TreeSet<Long> factors = new TreeSet<Long>();
		Map<Long, Boolean> factorsMap = new HashMap<Long, Boolean>();
		double sqrt = Math.sqrt(b);
		Long init = System.nanoTime();
		Long remain = b.longValue();
		for (int i=0; i<primes.size(); i++){
			Long prime = primes.get(i);
			if(remain%prime == 0){
				remain = remain/prime;
				lcm.add(prime);
				
				ArrayList<Long> newFactors = new ArrayList<Long>();
				for(Long factor: factors){
					
					Long tempFactor = factor * prime;
					if( tempFactor <= sqrt){                     
						if(!factorsMap.containsKey(tempFactor)){
							newFactors.add(tempFactor);
							factorsMap.put(tempFactor, true);
						}
					} else {
						break;
					}
				}
				if(!factorsMap.containsKey(prime)){
					factors.add(prime);
					factorsMap.put(prime, true);
				}
				factors.addAll(newFactors);
				
				i--;
			}
			if(remain== 1)
				break;
		}
		System.out.println(System.nanoTime()-init);
		//System.out.println(lcm);
		System.out.println(factors);
		return factors;
	}