Data update
This commit is contained in:
parent
07c7092a52
commit
61b93a2cd1
313 changed files with 6160 additions and 346 deletions
76
Task/Goldbachs-comet/Java/goldbachs-comet.java
Normal file
76
Task/Goldbachs-comet/Java/goldbachs-comet.java
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
public final class GoldbachsComet {
|
||||
|
||||
public static void main(String[] aArgs) {
|
||||
initialisePrimes(2_000_000);
|
||||
|
||||
System.out.println("The first 100 Goldbach numbers:");
|
||||
for ( int n = 2; n < 102; n++ ) {
|
||||
System.out.print(String.format("%3d%s", goldbachFunction(2 * n), ( n % 10 == 1 ? "\n" : "" )));
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
System.out.println("The 1,000,000th Goldbach number = " + goldbachFunction(1_000_000));
|
||||
|
||||
createImage();
|
||||
}
|
||||
|
||||
private static void createImage() {
|
||||
final int width = 1040;
|
||||
final int height = 860;
|
||||
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
Graphics graphics = image.getGraphics();
|
||||
graphics.setColor(Color.WHITE);
|
||||
graphics.fillRect(0, 0, width, height);
|
||||
|
||||
List<Color> colours = List.of( Color.BLUE, Color.GREEN, Color.RED );
|
||||
for ( int n = 2; n < 2002; n++ ) {
|
||||
graphics.setColor(colours.get(n % 3));
|
||||
graphics.fillOval(n / 2, height - 5 * goldbachFunction(2 * n), 10, 10);
|
||||
}
|
||||
|
||||
try {
|
||||
ImageIO.write(image, "png", new File("GoldbachsCometJava.png"));
|
||||
} catch (IOException ioe) {
|
||||
ioe.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static int goldbachFunction(int aNumber) {
|
||||
if ( aNumber <= 2 || aNumber % 2 == 1 ) {
|
||||
throw new AssertionError("Argument must be even and greater than 2: " + aNumber);
|
||||
}
|
||||
|
||||
int result = 0;
|
||||
for ( int i = 1; i <= aNumber / 2; i++ ) {
|
||||
if ( primes[i] && primes[aNumber - i] ) {
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void initialisePrimes(int aLimit) {
|
||||
primes = new boolean[aLimit];
|
||||
for ( int i = 2; i < aLimit; i++ ) {
|
||||
primes[i] = true;
|
||||
}
|
||||
|
||||
for ( int n = 2; n < Math.sqrt(aLimit); n++ ) {
|
||||
for ( int k = n * n; k < aLimit; k += n ) {
|
||||
primes[k] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean[] primes;
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue