27
27
28
28
import de .tilman_neumann .jml .factor .CombinedFactorAlgorithm ;
29
29
import de .tilman_neumann .util .SortedMultiset ;
30
+ import de .tilman_neumann .util .SortedMultiset_BottomUp ;
30
31
import it .unimi .dsi .fastutil .ints .Int2IntMap ;
31
32
32
33
/**
36
37
*/
37
38
public class Primality {
38
39
39
- private static class PrimePowerTreedMap extends TreeMap <BigInteger , Integer > {
40
+ private static class PrimePowerTreedMap extends SortedMultiset_BottomUp <BigInteger > {
40
41
private static final long serialVersionUID = 7802239809732541730L ;
41
42
42
43
@ Override
@@ -50,7 +51,7 @@ public Integer put(BigInteger key, Integer value) {
50
51
}
51
52
}
52
53
53
- private static class SquareFreeTreedMap extends TreeMap <BigInteger , Integer > {
54
+ private static class SquareFreeTreedMap extends SortedMultiset_BottomUp <BigInteger > {
54
55
private static final long serialVersionUID = -7769218967264615452L ;
55
56
56
57
@ Override
@@ -753,7 +754,7 @@ public static List<BigInteger> factorize(final BigInteger val, List<BigInteger>
753
754
* @param n
754
755
* @param map of all BigInteger primes and their associated exponents
755
756
*/
756
- public static void factorInteger (final BigInteger n , SortedMap <BigInteger , Integer > map ) {
757
+ public static void factorInteger (final BigInteger n , SortedMultiset <BigInteger > map ) {
757
758
Map <Integer , Integer > tMap = new TreeMap <Integer , Integer >();
758
759
BigInteger N = countPrimes1021 (n , tMap );
759
760
if (tMap .size () > 0 ) {
@@ -769,11 +770,7 @@ public static void factorInteger(final BigInteger n, SortedMap<BigInteger, Integ
769
770
} else {
770
771
factorizer = new CombinedFactorAlgorithm (1 , null , false , false , true );
771
772
}
772
- SortedMultiset <BigInteger > set = factorizer .factor (N );
773
-
774
- for (Map .Entry <BigInteger , Integer > entry : set .entrySet ()) {
775
- map .put (entry .getKey (), entry .getValue ());
776
- }
773
+ factorizer .factor (N , map );
777
774
}
778
775
return ;
779
776
}
@@ -786,17 +783,14 @@ public static void factorInteger(final BigInteger n, SortedMap<BigInteger, Integ
786
783
* @return map of all BigInteger primes and their associated exponents
787
784
*/
788
785
public static SortedMap <BigInteger , Integer > factorInteger (final BigInteger n ) {
789
- SortedMap <BigInteger , Integer > map = new TreeMap <BigInteger , Integer >();
790
- factorInteger (n , map );
791
- return map ;
792
- // CombinedFactorAlgorithm factorizer;
793
- // if (Config.JAVA_UNSAFE) {
794
- // final int cores = Runtime.getRuntime().availableProcessors();
795
- // factorizer = new CombinedFactorAlgorithm(cores / 2 + 1, null, true, false, true);
796
- // } else {
797
- // factorizer = new CombinedFactorAlgorithm(1, null, false, false, true);
798
- // }
799
- // return factorizer.factor(n);
786
+ CombinedFactorAlgorithm factorizer ;
787
+ if (Config .JAVA_UNSAFE ) {
788
+ final int cores = Runtime .getRuntime ().availableProcessors ();
789
+ factorizer = new CombinedFactorAlgorithm (cores / 2 + 1 , null , true , false , true );
790
+ } else {
791
+ factorizer = new CombinedFactorAlgorithm (1 , null , false , false , true );
792
+ }
793
+ return factorizer .factor (n );
800
794
}
801
795
802
796
public static BigInteger rho (final BigInteger val ) {
@@ -1061,7 +1055,7 @@ public static int moebiusMu(BigInteger value) {
1061
1055
if (value .equals (BigInteger .ONE )) {
1062
1056
return 1 ;
1063
1057
}
1064
- SortedMap <BigInteger , Integer > map = new SquareFreeTreedMap ();
1058
+ SortedMultiset <BigInteger > map = new SquareFreeTreedMap ();
1065
1059
try {
1066
1060
factorInteger (value , map );
1067
1061
// value is square-free
@@ -1147,7 +1141,7 @@ public static boolean isPrimePower(BigInteger value) {
1147
1141
return false ;
1148
1142
}
1149
1143
try {
1150
- SortedMap < BigInteger , Integer > map = new PrimePowerTreedMap ();
1144
+ PrimePowerTreedMap map = new PrimePowerTreedMap ();
1151
1145
factorInteger (value , map );
1152
1146
if (map .size () == 1 ) {
1153
1147
for (Map .Entry <BigInteger , Integer > entry : map .entrySet ()) {
@@ -1200,9 +1194,8 @@ public static boolean isSquareFree(BigInteger val) {
1200
1194
if (val .compareTo (BigInteger .ZERO ) < 0 ) {
1201
1195
val = val .negate ();
1202
1196
}
1203
- SortedMap <BigInteger , Integer > map = new SquareFreeTreedMap ();
1204
1197
try {
1205
- factorInteger (val , map );
1198
+ factorInteger (val , new SquareFreeTreedMap () );
1206
1199
return true ;
1207
1200
} catch (ReturnException re ) {
1208
1201
}
0 commit comments