1 10 11 20 24 25 package mondrian.util; 26 27 import java.util.Arrays ; 28 import java.io.PrintWriter ; 29 30 49 final class PrimeFinder { 50 55 public static final int largestPrime = Integer.MAX_VALUE; 56 57 89 90 private static final int[] primeCapacities = { 91 largestPrime, 93 94 5,11,23,47,97,197,397,797,1597,3203,6421,12853,25717,51437,102877,205759, 96 411527,823117,1646237,3292489,6584983,13169977,26339969,52679969,105359939, 97 210719881,421439783,842879579,1685759167, 98 99 433,877,1759,3527,7057,14143,28289,56591,113189,226379,452759,905551,1811107, 101 3622219,7244441,14488931,28977863,57955739,115911563,231823147,463646329,927292699, 102 1854585413, 103 104 953,1907,3821,7643,15287,30577,61169,122347,244703,489407,978821,1957651,3915341, 106 7830701,15661423,31322867,62645741,125291483,250582987,501165979,1002331963, 107 2004663929, 108 109 1039,2081,4177,8363,16729,33461,66923,133853,267713,535481,1070981,2141977,4283963, 111 8567929,17135863,34271747,68543509,137087021,274174111,548348231,1096696463, 112 113 31,67,137,277,557,1117,2237,4481,8963,17929,35863,71741,143483,286973,573953, 115 1147921,2295859,4591721,9183457,18366923,36733847,73467739,146935499,293871013, 116 587742049,1175484103, 117 118 599,1201,2411,4831,9677,19373,38747,77509,155027,310081,620171,1240361,2480729, 120 4961459,9922933,19845871,39691759,79383533,158767069,317534141,635068283,1270136683, 121 122 311,631,1277,2557,5119,10243,20507,41017,82037,164089,328213,656429,1312867, 124 2625761,5251529,10503061,21006137,42012281,84024581,168049163,336098327,672196673, 125 1344393353, 126 127 3,7,17,37,79,163,331,673,1361,2729,5471,10949,21911,43853,87719,175447,350899, 129 701819,1403641,2807303,5614657,11229331,22458671,44917381,89834777,179669557, 130 359339171,718678369,1437356741, 131 132 43,89,179,359,719,1439,2879,5779,11579,23159,46327,92657,185323,370661,741337, 134 1482707,2965421,5930887,11861791,23723597,47447201,94894427,189788857,379577741, 135 759155483,1518310967, 136 137 379,761,1523,3049,6101,12203,24407,48817,97649,195311,390647,781301,1562611, 139 3125257,6250537,12501169,25002389,50004791,100009607,200019221,400038451,800076929, 140 1600153859 141 159 }; 160 161 162 static { Arrays.sort(primeCapacities); 166 } 167 168 171 private PrimeFinder() {} 172 173 180 public static int nextPrime(int desiredCapacity) { 181 int i = Arrays.binarySearch(primeCapacities, desiredCapacity); 182 if (i < 0) { 183 i = -i -1; } 187 return primeCapacities[i]; 188 } 189 190 197 protected static void main(String args[]) { 198 int from = Integer.parseInt(args[0]); 199 int to = Integer.parseInt(args[1]); 200 201 statistics(from,to,new PrintWriter (System.out)); 202 } 203 204 207 protected static void statistics(int from, int to, PrintWriter pw) { 208 for (int i=0; i<primeCapacities.length-1; i++) { 210 if (primeCapacities[i] >= primeCapacities[i+1]) { 211 throw new RuntimeException ("primes are unsorted or contain duplicates; detected at "+i+"@"+primeCapacities[i]); 212 } 213 } 214 215 double accDeviation = 0.0; 216 double maxDeviation = - 1.0; 217 218 for (int i=from; i<=to; i++) { 219 int primeCapacity = nextPrime(i); 220 double deviation = (primeCapacity - i) / (double)i; 222 223 if (deviation > maxDeviation) { 224 maxDeviation = deviation; 225 pw.println("new maxdev @"+i+"@dev="+maxDeviation); 226 } 227 228 accDeviation += deviation; 229 } 230 long width = 1 + (long)to - (long)from; 231 232 double meanDeviation = accDeviation/width; 233 pw.println("Statistics for ["+ from + ","+to+"] are as follows"); 234 pw.println("meanDeviation = "+(float)meanDeviation*100+" %"); 235 pw.println("maxDeviation = "+(float)maxDeviation*100+" %"); 236 } 237 } 238 239 | Popular Tags |