Wolstenholme numbers: Difference between revisions
Content added Content deleted
imported>Maxima enthusiast No edit summary |
(New post.) |
||
Line 471: | Line 471: | ||
935 984 1202 1518 1539 |
935 984 1202 1518 1539 |
||
1770 1811 2556 2762 2769</syntaxhighlight> |
1770 1811 2556 2762 2769</syntaxhighlight> |
||
=={{header|Java}}== |
|||
<syntaxhighlight lang="java"> |
|||
import java.math.BigInteger; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
public final class WolstenholmeNumbers { |
|||
public static void main(String[] args) { |
|||
WolstenholmeIterator iterator = new WolstenholmeIterator(); |
|||
List<BigInteger> wolstenholmePrimes = new ArrayList<BigInteger>(); |
|||
System.out.println("Wolstenholme numbers:"); |
|||
for ( int index = 1; index <= 10_000; index++ ) { |
|||
BigInteger wolstenholmeNumber = iterator.next(); |
|||
if ( wolstenholmePrimes.size() < 15 && wolstenholmeNumber.isProbablePrime(15) ) { |
|||
wolstenholmePrimes.add(wolstenholmeNumber); |
|||
} |
|||
if ( index <= 20 || PRINT_POINTS.contains(index) ) { |
|||
System.out.println(String.format("%5d%s%s", index, ": ", abbreviate(wolstenholmeNumber))); |
|||
} |
|||
} |
|||
System.out.println(); |
|||
System.out.println("Prime Wolstenholme numbers:"); |
|||
for ( int index = 0; index < wolstenholmePrimes.size(); index++ ) { |
|||
System.out.println(String.format("%5d%s%s", index + 1, ": ", abbreviate(wolstenholmePrimes.get(index)))); |
|||
} |
|||
} |
|||
private static String abbreviate(BigInteger number) { |
|||
String text = number.toString(); |
|||
int digits = text.length(); |
|||
return digits <= 20 ? |
|||
text : text.substring(0, 20) + " ... " + text.substring(digits - 20) + " (digits: " + digits + ")"; |
|||
} |
|||
private static final List<Integer> PRINT_POINTS = List.of( 500, 1_000, 2_500, 5_000, 10_000 ); |
|||
} |
|||
final class WolstenholmeIterator { |
|||
public BigInteger next() { |
|||
BigInteger result = secondHarmonic.numerator(); |
|||
k += 1; |
|||
secondHarmonic = secondHarmonic.add( new Rational(BigInteger.ONE, BigInteger.valueOf(k * k)) ); |
|||
return result; |
|||
} |
|||
private int k = 1; |
|||
private Rational secondHarmonic = new Rational(BigInteger.ONE, BigInteger.ONE); |
|||
} |
|||
final class Rational { |
|||
public Rational(BigInteger aNumerator, BigInteger aDenominator) { |
|||
numerator = aNumerator; |
|||
denominator = aDenominator; |
|||
BigInteger gcd = numerator.gcd(denominator); |
|||
numerator = numerator.divide(gcd); |
|||
denominator = denominator.divide(gcd); |
|||
} |
|||
public Rational add(Rational aRational) { |
|||
BigInteger numer = numerator.multiply(aRational.denominator).add(aRational.numerator.multiply(denominator)); |
|||
BigInteger denom = aRational.denominator.multiply(denominator); |
|||
return new Rational(numer, denom); |
|||
} |
|||
public BigInteger numerator() { |
|||
return numerator; |
|||
} |
|||
private BigInteger numerator; |
|||
private BigInteger denominator; |
|||
} |
|||
</syntaxhighlight> |
|||
{{ out }} |
|||
<pre> |
|||
Wolstenholme numbers: |
|||
1: 1 |
|||
2: 5 |
|||
3: 49 |
|||
4: 205 |
|||
5: 5269 |
|||
6: 5369 |
|||
7: 266681 |
|||
8: 1077749 |
|||
9: 9778141 |
|||
10: 1968329 |
|||
11: 239437889 |
|||
12: 240505109 |
|||
13: 40799043101 |
|||
14: 40931552621 |
|||
15: 205234915681 |
|||
16: 822968714749 |
|||
17: 238357395880861 |
|||
18: 238820721143261 |
|||
19: 86364397717734821 |
|||
20: 17299975731542641 |
|||
500: 40989667509417020364 ... 48084984597965892703 (digits: 434) |
|||
1000: 83545938483149689478 ... 99094240207812766449 (digits: 866) |
|||
2500: 64537911900230612090 ... 12785535902976933153 (digits: 2164) |
|||
5000: 34472086597488537716 ... 22525144829082590451 (digits: 4340) |
|||
10000: 54714423173933343999 ... 49175649667700005717 (digits: 8693) |
|||
Prime Wolstenholme numbers: |
|||
1: 5 |
|||
2: 266681 |
|||
3: 40799043101 |
|||
4: 86364397717734821 |
|||
5: 36190908596780862323 ... 79995976006474252029 (digits: 104) |
|||
6: 33427988094524601237 ... 48446489305085140033 (digits: 156) |
|||
7: 22812704758392002353 ... 84405125167217413149 (digits: 218) |
|||
8: 28347687473208792918 ... 45794572911130248059 (digits: 318) |
|||
9: 78440559440644426017 ... 30422337523878698419 (digits: 520) |
|||
10: 22706893975121925531 ... 02173859396183964989 (digits: 649) |
|||
11: 27310394808585898968 ... 86311385662644388271 (digits: 935) |
|||
12: 13001072736642048751 ... 08635832246554146071 (digits: 984) |
|||
13: 15086863305391456002 ... 05367804007944918693 (digits: 1202) |
|||
14: 23541935187269979100 ... 02324742766220468879 (digits: 1518) |
|||
15: 40306783143871607599 ... 58901192511859288941 (digits: 1539) |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |