Сегодня хотелось бы рассмотреть два алгоритма на java. Первая программа ищет простые числа методом Решета Эратосфена. Код можно посмотреть тут:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package primenumbers;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author javamain
 */
public class PrimeNumbers {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
            int n = Math.abs( 100 );
            List<Boolean> sieve=new ArrayList<Boolean>();
            
    
            for( int i = 0; i <= n; i++ )
                sieve.add(Boolean.TRUE);

            for( int i = 2; i <= n; i++ )
                for( int k = i + 1; k <= n; k++ )
                     if( k % i == 0 )
                         sieve.set(k, Boolean.FALSE); 
            
            for(int i=2 ; i<n ;  i++)
            {
                if( sieve.get( i ) == true)
                    System.out.println( (new Integer(i)).toString()+"\n");
            }
    }
}



Второй алгоритм ищет два рендомных числа больше 5000000 до 10000000.
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pkg2bignumber;

import java.util.Random;

/**
 *
 * @author javamain
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Random rand=new Random();
        
        double number,number2;
        for(int i=0; i<5000000; i++){
            
            number = Math.round(rand.nextDouble()*5000000)+5000000;
            number2 = Math.round(rand.nextDouble()*5000000)+5000000;
            System.out.println(((Double)number).toString()+" "+((Double)number2).toString()+"\n");
        }
        
    } 
}

Комментарии (20)


  1. GORKOFF
    12.11.2015 20:28
    +16

    Простите, но что это?


    1. javamain
      12.11.2015 20:47
      -6

      Два алгоритма которые я сегодня отстрочил, habr же не резиновый, и я решил запостить именно тут.


      1. MiXei4
        12.11.2015 21:23
        +4

        Это какой-то троллинг? Видимо настолько тонкий, что никто не понял о чём он.


      1. vasachi
        12.11.2015 21:29
        +2

        «Тут» как раз хабр…


  1. Mgrin
    12.11.2015 20:32
    +4

    Ко всему прочему, не Simple Numbers, а Prime Numbers. Но вообще мне тоже интересно, что это и зачем оно тут?


  1. barker
    12.11.2015 20:39
    +8

    Второй алгоритм более эпичный, я считаю.


    1. javamain
      12.11.2015 20:41
      -5

      А вот я бы сказал, что очень сложно подобрать к первому редомному числу еще и второе рендомное число перебором.


      1. REZ1DENT3
        12.11.2015 20:42
        +4

        А скажите, для чего это нужно? )) я конечно, не против гавнокода… но зачем на хабр?


        1. javamain
          12.11.2015 20:54
          -5

          Давно не писал статьи на habr. Вот выдалась минутка и для этого дела. Сразу решил, что если кто-то и прочтет, то на habr-e.


    1. Valle
      13.11.2015 06:46

      Зато у первого прекрасная преамбула.

      int n = Math.abs( 100 );
      List<Boolean> sieve=new ArrayList<Boolean>();
      

      Это же просто прелестно!


  1. REZ1DENT3
    12.11.2015 20:39
    +2

    Код на GitHub, и «статья» поместится в один твит ;)


  1. zagayevskiy
    12.11.2015 20:50
    +2

    Ну раз пошла такая пьянка, то немного сумасшествия:
    Given three integers K, L and R return the number of integers between L and R that have exactly K divisors.
    Задача была минимизировать число символов (имя метода задано, непечатные символы не в счёт). Ну и ограничения по времения, а посему a — решето Эратосфена. *crazy*

    int r, y = 1, h, p = 1, l = 1, a[];
    int OddDivNum(int K, int L, int R) {				
    ?
    	for (; ++l * l < L;);
    		
    	for (; y * y++ < R;);
    	a = new int[y];
    ?
    	for (; (L = ++p * p) < y;)
    		for (; a[p] == 0 && L < y; L += p)
    			a[L] = 1;
    ?
    	for (; (h = l) * l <= R; ++l, r += y == K ? 1 : 0)
    		for (p = y = 1; p++ <= h;)
    			if (a[p] == 0)
    				for (L = y*2; h % p == 0; h /= p, y += L);
    ?
    	return r;
    }
    


    1. javamain
      12.11.2015 21:24
      -1

      я тут попробовал ваш код http://goo.gl/T8leaL


      1. zagayevskiy
        12.11.2015 21:48
        +1

        Это на джаве и каждый тест надо в отдельном инстансе класса запускать.


  1. KvanTTT
    13.11.2015 00:41
    +2

    Теперь ждем алгоритмы перемножения и деления чисел.


  1. vvovas
    13.11.2015 06:05
    +2

    Второй алгоритм ищет два рендомных числа больше 5000000 до 10000000.
    Он этого не делает. Он 5 млн. раз выводит 2 случайных числа.

    Как говорится:
    Вот так, с помощью нехитрых приспособлений буханку белого (или черного) хлеба можно превратить в троллейбус. НО ЗАЧЕМ?!


  1. 3h4k
    13.11.2015 08:12
    +2

    Hello, Resheto!
    Hello, Random!


  1. DarkByte
    13.11.2015 12:24
    +3

    Статья попахивает пропагандой самоубийства.


  1. Keyten
    13.11.2015 12:49
    +2


    1. KvanTTT
      13.11.2015 13:18

      Вопрос даже не просто «Зачем», а «Зачем такая тривиальщина»?