How do I generate the first n prime numbers?

前端 未结 15 1678
再見小時候
再見小時候 2021-02-02 09:57

I am learning Ruby and doing some math stuff. One of the things I want to do is generate prime numbers.

I want to generate the first ten prime numbers and the first ten

相关标签:
15条回答
  • 2021-02-02 10:33

    Here is a way to generate the prime numbers up to a "max" argument from scratch, without using Prime or Math. Let me know what you think.

    def prime_test max
        primes = []
        (1..max).each {|num| 
            if
                (2..num-1).all? {|denom| num%denom >0}
            then
                primes.push(num)
            end
        }
        puts primes
    end
    
    prime_test #enter max
    
    0 讨论(0)
  • 2021-02-02 10:35

    Ruby: Print N prime Numbers http://mishra-vishal.blogspot.in/2013/07/include-math-def-printnprimenumbernoofp.html

    include Math
    
    def print_n_prime_number(no_of_primes=nil)
    
      no_of_primes = 100 if no_of_primes.nil?
    
      puts "1 \n2"
    
      count = 1
    
      number = 3
    
      while count < no_of_primes
    
    sq_rt_of_num = Math.sqrt(number)
    
    number_divisible_by = 2
    
    while number_divisible_by <= sq_rt_of_num
    
      break if(number % number_divisible_by == 0)
    
      number_divisible_by = number_divisible_by + 1
    
    end
    
    if number_divisible_by > sq_rt_of_num
    
      puts number
    
      count = count+1
    
    end
    
    number = number + 2
    
      end
    
    end
    
    print_n_prime_number
    
    0 讨论(0)
  • 2021-02-02 10:38

    I did this for a coding kata and used the Sieve of Eratosthenes.

    puts "Up to which number should I look for prime numbers?"
    number = $stdin.gets.chomp
    n = number.to_i
    array = (1..n).to_a
    
      i = 0
    
    while array[i]**2 < n
    
    i = i + 1
    array = array.select do |element|
      element % array[i] != 0 || element / array[i] == 1
    
    
    end
    end
    
     puts array.drop(1)
    
    0 讨论(0)
  • 2021-02-02 10:38

    Here's a super compact method that generates an array of primes with a single line of code.

      def get_prime(up_to)
        (2..up_to).select { |num| (2...num).all? { |div| (num % div).positive? } }
      end
    
    0 讨论(0)
  • 2021-02-02 10:38
    def get_prime(number)
      (2..number).each do |no|
          if (2..no-1).all? {|num| no % num  > 0}
            puts no
          end
      end
    end
    
    get_prime(100)
    
    0 讨论(0)
  • 2021-02-02 10:39

    I think this may be an expensive solution for very large max numbers but seems to work well otherwise:

    def multiples array
      target = array.shift 
      array.map{|item| item if target % item == 0}.compact
    end
    
    def prime? number
      reversed_range_array = *(2..number).reverse_each
      multiples_of_number = multiples(reversed_range_array)
      multiples_of_number.size == 0 ? true : false
    end
    
    def primes_in_range max_number
      range_array = *(2..max_number)
      range_array.map{|number| number if prime?(number)}.compact
    end
    
    0 讨论(0)
提交回复
热议问题