Guest User

Untitled

a guest
May 25th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class exp {
  4. public static void main(String[] s) {
  5.  
  6. bench();
  7. bench();
  8. bench();
  9. bench();
  10. bench();
  11. bench();
  12. bench();
  13. bench();
  14. bench();
  15. bench();
  16. bench();
  17. bench();
  18. bench();
  19. bench();
  20. }
  21.  
  22. static final int n=2000000;
  23. static void bench() {
  24.  
  25. long start = System.currentTimeMillis();
  26. int[]bits = new int[(n / 32) + 1];
  27.  
  28. for(int i=2;i<=n;i++){
  29. set(bits, i);
  30. }
  31.  
  32. int count = calc(bits);
  33. long end = System.currentTimeMillis();
  34. System.out.println("Ilosc: " + count);
  35. System.out.println((end - start) + " ms.");
  36.  
  37. }
  38.  
  39. private static int log2(int n){
  40. int log = 0;
  41. while ((n >>>= 1) != 0) log++;
  42. return log;
  43. }
  44.  
  45. static int bit(int pos){
  46. return 1 << (pos % n);
  47. }
  48.  
  49. static void set(int[]bits, int pos) {
  50. bits[pos >>> 5] |= bit(pos);
  51. }
  52.  
  53. static void clear(int[]bits, int pos) {
  54. bits[pos >>> 5] &= ~bit(pos);
  55. }
  56.  
  57. static boolean test(int[]bits, int pos) {
  58. return (bits[pos >>> 5] & bit(pos)) != 0;
  59. }
  60.  
  61. static int calc(int[]b) {
  62. int i = 2;
  63. int count = 0;
  64. while (i*i<=n) {
  65. if(test(b, i)) {
  66. count++;
  67. calcInner(b, 2*i);
  68. }
  69. i++;
  70. }
  71. while (i<=n) {
  72. if(test(b, i)) {
  73. count++;
  74. }
  75. i++;
  76. }
  77. return count;
  78. }
  79.  
  80. static void calcInner(int[]b, int k) {
  81. while(k<=n) {
  82. clear(b, k);
  83. k = k + 1;
  84. }
  85. }
  86. }
Add Comment
Please, Sign In to add comment