1. Java / Говнокод #9175

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    private void run() throws Exception {
    		Scanner s = new Scanner(new File("input.txt"));
    		PrintWriter p = new PrintWriter(new File("output.txt"));
    		
    		int n = s.nextInt();
    		int sum = 0;
    		
    		init();
    		
    		for(int i = 1; i <= n; i++) {
    			sum += find(i);
    		}
    		
    		p.print(sum);
    		
    		s.close();
    		p.close();
    	}
    	
    	private void init() {
    		for(int i = 0; i < 100; i++) {
    			pow_2[i] = (int) Math.pow(2, i + 1);
    		}
    		
    		for(int i = 0; i < 100; i++) {
    			pow_3[i] = (int) Math.pow(3, i + 1);
    		}
    		
    		for(int i = 0; i < 100; i++) {
    			pow_4[i] = (int) Math.pow(4, i + 1);
    		}
    		
    		for(int i = 0; i < 100; i++) {
    			pow_5[i] = (int) Math.pow(5, i + 1);
    		}
    	}
    	
    	private int find(int num) {
    		for(int i = 0; i < 100; i++) {
    			if(pow_2[i] == num) return 2;
    			if(num > pow_2[99]) break;
    		}
    		
    		for(int i = 0; i < 100; i++) {
    			if(pow_3[i] == num) return 3;
    			if(num > pow_3[99]) break;
    		}
    		
    		for(int i = 0; i < 100; i++) {
    			if(pow_4[i] == num) return 4;
    			if(num > pow_4[99]) break;
    		}
    		
    		for(int i = 0; i < 100; i++) {
    			if(pow_5[i] == num) return 5;
    			if(num > pow_5[99]) break;
    		}
    		
    		return 0;
    	}

    Говнолаба... есть идеи как оптимизировать по скорости?

    Запостил: Nyashka, 19 Января 2012

    Комментарии (11) RSS

    • А вы слышали что такое логарифм?
      Ответить
      • ну, с целыми можно и оптимизировать. число 99 - лажа, инт это всего лишь 2^31 - 1, потому программа не будет работать правильно. С четвёркой тупо, ибо любая степень четвёрки автоматом является степенью двойки, потому программа работает ещё более неправильно.
        Для двойки это просто условие (число 1 битов = 1 и само число > 1).
        Для четвёрки похоже (число 1 битов = 1, само число > 3 и 1 бит стоит в нечётной позиции).
        Для остальных можно тупо в цикле делить и проверять что остаток всегда 0.
        Ответить
        • Можно здорово оптимизировать саму идею алгоритма: вместо перебора всех чисел от 1 до n посчитать целые части логарифмов от n по основаниям 2..5 и плясать от этого.
          Ответить
          • Ну, во первых, числа приходят из входного потока. Таблица степеней вообще не нужна, можно быстро проверить на степень без неё, что я и описал в комментарии. С целой частью логарифма опять же нужна таблица степеней.
            Ответить
      • Слышал... про них что-то забыл, когда писал. С ними действительно проще выйдет.
        Ответить
    • > есть идеи как оптимизировать по скорости?
      Есть. Возьмите кирпич
      Ответить
      • Злой Вы >_>
        Ответить
        • «Это Интернет, детка! Тут и нахуй послать могут» © Неизвестный тролль

          Вы ошиблись ресурсом. Здесь люди над говнецом смеются, а не советы раздают.
          Ответить
    • >оптимизировать по скорости
      Попробуй Си.
      Ответить
      • Низя. Вообще весело: написать ГК на джаве, сказать, что она - медленная, написать оптимизированный код на сишке и радоваться жизни... =\
        Ответить

    Добавить комментарий