UralPrimeSpiral
ウラムの螺旋のプログラム.
import java.awt.*; import javax.swing.*; public class UlamPrimeSpiral extends JFrame { final int size = 1001; final int max = size * size; Image image; boolean prime; int x, y; int move = {1,0,0,1,-1,0,0,-1}; void sieve() { prime = new boolean[max + 1]; prime[1] = false; for(int i = 2 ; i < max ; i++) prime[i] = (i == 2 || i % 2 != 0) ? true : false; for(int i = 3 ; i * i <= max ; i += 2) if(prime[i]) for(int j = i ; i * j <= max ; j += 2) prime[i * j] = false; } class ImageCanvas extends Canvas { public void paint(Graphics g){ sieve(); g.setColor(Color.WHITE); g.fillRect(0, 0, size, size); g.setColor(Color.RED); x = y = size / 2; int k = 0, num = 1; for(int step = 1 ; true ; step++, k = (k + 2) % 4) { for(int i = 0 ; i < 2 ; i++) { for(int j = 0 ; j < step ; j++) { if(prime[num++]) g.fillRect(x, y, 1, 1); x += move[(i + k) * 2]; y += move[(i + k) * 2 + 1]; if(x >= size) return; } } } } } UlamPrimeSpiral() { Canvas c = new ImageCanvas(); getContentPane().add(c); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setTitle("UlamPrimeSpiral"); setVisible(true); setSize(size, size); } public static void main(String[] args) { new UlamPrimeSpiral(); } }