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}}==