Yesterday I was having some fun trying to look for some patterns in primes; and I think I found something interesting.
The idea is to start with an array of primes {p1, p2, p3, ... }
, print it, then set the value at index i = abs( [i] - [i-1] )
or put more formally, set the value at i
equal to the "prime gap"; then repeat this, but use the prime gaps and find their gaps. And so on.
screenshot.
You can see at the top row we start with the primes, then their gaps, then their gaps, and so on. It starts to produce that triangle pattern
Here is the code to produce the pattern I've found. If you run the code you can see the pattern, it's actually pretty fascinating!
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.util.Arrays;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class PrimeSandbox
{
public static void main(String[] args)
{
JTextArea screen = new JTextArea(5, 20);
Font font = new Font("Times New Roman", Font.BOLD, 8);
screen.setFont(font);
screen.setForeground(Color.BLUE);
JScrollPane scrollPane = new JScrollPane(screen);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(BorderLayout.CENTER, scrollPane);
//frame.pack();
frame.setLocation(0, 0);
frame.setSize(1000, 1000);
frame.setVisible(true);
frame.setAlwaysOnTop(true);
int arrsize = 150;
int[] parrOrig = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
547, 557, 563, 569, 571, 577, 587, 593, 599, 601,
607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
877, 881, 883, 887, 907, 911, 919, 929, 937, 941,
947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013 };
int [] parr = Arrays.copyOf(parrOrig, arrsize);
int lines = 0;
while(lines < 1000)
{
int[] oldarr = Arrays.copyOf(parr,arrsize);
for(int i = 0; i < arrsize; i++)
screen.append(" " + oldarr[i]);
screen.append("\n");
screen.setCaretPosition(screen.getText().length());
for(int i = 0; i < arrsize; i++)
{
if(i == 0)
parr[i] = 0;
else
parr[i] = Math.abs(oldarr[i] - oldarr[i-1]);
}
lines++;
try {
Thread.sleep(20);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
}