Arithmetic/Rational: Difference between revisions
Content added Content deleted
m (→Icon and Unicon: header simplification) |
(Added Java implementation) |
||
Line 761: | Line 761: | ||
<lang j> (#~ is_perfect_rational"0) (* <:@+:) 2^i.10x |
<lang j> (#~ is_perfect_rational"0) (* <:@+:) 2^i.10x |
||
6 28 496 8128</lang> |
6 28 496 8128</lang> |
||
=={{header|Java}}== |
|||
Uses BigRational class: [[Arithmetic/Rational/Java]] |
|||
<lang java>class BigRationalFindPerfectNumbers |
|||
{ |
|||
public static void main(String[] args) |
|||
{ |
|||
int MAX_NUM = (1 << 19); |
|||
BigRational TWO = BigRational.valueOf(2); |
|||
for (int i = 1; i < MAX_NUM; i++) |
|||
{ |
|||
BigRational reciprocalSum = BigRational.ONE; |
|||
if (i > 1) |
|||
reciprocalSum = reciprocalSum.add(BigRational.valueOf(i).reciprocal()); |
|||
int maxDivisor = (int)Math.sqrt(i); |
|||
if (maxDivisor >= i) |
|||
maxDivisor--; |
|||
for (int divisor = 2; divisor <= maxDivisor; divisor++) |
|||
{ |
|||
if ((i % divisor) == 0) |
|||
{ |
|||
reciprocalSum = reciprocalSum.add(BigRational.valueOf(divisor).reciprocal()); |
|||
int dividend = i / divisor; |
|||
if (divisor != dividend) |
|||
reciprocalSum = reciprocalSum.add(BigRational.valueOf(dividend).reciprocal()); |
|||
} |
|||
} |
|||
if (reciprocalSum.equals(TWO)) |
|||
System.out.println(String.valueOf(i) + " is a perfect number"); |
|||
} |
|||
return; |
|||
} |
|||
} |
|||
</lang> |
|||
Output: |
|||
<pre>6 is a perfect number |
|||
28 is a perfect number |
|||
496 is a perfect number |
|||
8128 is a perfect number</pre> |
|||
=={{header|JavaScript}}== |
=={{header|JavaScript}}== |