Factors of an integer: Difference between revisions

From Rosetta Code
Content added Content deleted
(→‎{{header|Python}}: (loops up to n/2))
m (→‎{{header|Ruby}}: optimization)
Line 25: Line 25:
[1, 3, 5, 9, 15]
[1, 3, 5, 9, 15]


As we only have to loop up to <math>\sqrt{n}</math>, we can write
<lang ruby>class Integer
def factors()
2.upto(Math.sqrt(self)).select {|i| (self % i).zero?} \
.inject([1]) {|f, i| f << i << self/i} \
.sort
end
end
p 45.factors</lang>
[[Category:Arithmetic operations]]
[[Category:Arithmetic operations]]
{{basic data operation}}
{{basic data operation}}

Revision as of 16:53, 15 August 2009

Task
Factors of an integer
You are encouraged to solve this task according to the task description, using any language you may know.

Compute the factors of a number.

Clojure

<lang lisp>(defn factors [n] (filter #(zero? (rem n %)) (range 1 n)))

(print (factors 45))</lang>

(1 3 5 9 15)

Python

<lang python>>>> def factors(n): return [i for i in range(1,n//2) if not n%i]

>>> factors(45) [1, 3, 5, 9, 15]</lang>

Ruby

<lang ruby>class Integer

 def factors() (1..self - 1).select { |n| (self % n).zero? } end

end p 45.factors</lang>

[1, 3, 5, 9, 15]

As we only have to loop up to , we can write <lang ruby>class Integer

 def factors()
   2.upto(Math.sqrt(self)).select {|i| (self % i).zero?} \
                          .inject([1]) {|f, i| f << i << self/i} \
                          .sort
 end

end p 45.factors</lang>

Basic Data Operation
This is a basic data operation. It represents a fundamental action on a basic data type.

You may see other such operations in the Basic Data Operations category, or:

Integer Operations
Arithmetic | Comparison

Boolean Operations
Bitwise | Logical

String Operations
Concatenation | Interpolation | Comparison | Matching

Memory Operations
Pointers & references | Addresses