package ru.susu.algebra.ranks;
import java.math.BigInteger;
import java.util.BitSet;
import java.util.HashMap;
import java.util.Map;
import ru.susu.algebra.number.MapPrimeNumbersProvider;
import ru.susu.algebra.operation.IOperation;
import ru.susu.algebra.pair.Pair;
import ru.susu.algebra.util.NumberUtilities;
/**
* 2 {@link BitSet}.
* [1..number] .
*
* @author akargapolov
* @since: 03.05.2010
*/
public class NumbersBitSetFactorizationProvider implements IOperation<Map<Integer, BitSet>>
{
/**
* @param sources - sources[0] , [1..number]
* @return ->
*/
@Override
public Map<Integer, BitSet> performOperation(Object... sources)
{
Map<Integer, Integer> primes = new MapPrimeNumbersProvider().performOperation(sources);
Integer number = (Integer) sources[0];
Map<Integer, BitSet> result = new HashMap<Integer, BitSet>();
for (int num = 1; num <= number; num++)
{
BitSet bitset = new BitSet(primes.size());
for (Pair<Integer, Integer> pair : NumberUtilities.factorization(BigInteger.valueOf(num)))
{
if (pair.getValue() % 2 == 0)
continue;
bitset.set(primes.get(pair.getKey()), true);
}
result.put(num, bitset);
}
return result;
}
}
|