Posted on 2020/12/28, 7:23 PM By admin22
素数を螺旋状に並べた自然数の部分にマークして可視化すると、対角線が強調された規則性があるように見える画像をウラムの螺旋と呼ばれます。素数の出現ルールはまだ解明されていないためそのヒントになるのではと期待されています。
先日放送が終了した東野圭吾原作「危険なビーナス」で、殺人事件の動機となる題材として使われいたことをきっかけに、実際にプログラムで描いてみました。(こういうネタを作品にしこむのはさすがです。「恨む」とかけてたり・・)
参考)https://tony-mooori.blogspot.com/2015/10/processing_25.html
上記、無駄のないプログラムでシンプルでしたので、使わせていただきました。
ここではただ描画するだけでなく、下記、素数をとおる半直線(8方向)の関数との重なり具合も見てみました。(赤点)
参考) https://ja.wikipedia.org/wiki/%E3%82%A6%E3%83%A9%E3%83%A0%E3%81%AE%E8%9E%BA%E6%97%8B
またオイラーの素数多項式についても調べてみました。(赤点)
参考)
下記コード。コメントで描画を切り替えています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import java.util.*; int[] xy1, xy2; void setup() { size(512, 512); xy1 = new int[width*height]; xy2 = new int[width*height]; Arrays.fill(xy1, 1); xy1[0] = xy1[1] = 0; for (int i = 2; i < sqrt(xy1.length) ; i++ ) { if ( xy1[i] == 1 ) { for (int j = 2 * i; j < xy1.length; j += i ) { xy1[j] = 0; } } } Arrays.fill(xy2, 0); for(int i=0;i<xy2.length;i++){ for(int j=0;j<xy2.length;j++){ int u = 4 * j * j - 3 * j + 1; //int u = 4 * j * j - 2 * j + 1; //int u = 4 * j * j - 1 * j + 1; //int u = 4 * j * j - 0 * j + 1; //int u = 4 * j * j + 1 * j + 1; //int u = 4 * j * j + 2 * j + 1; //int u = 4 * j * j + 3 * j + 1; //int u = 4 * j * j + 12 * j + 1; if(u > xy2.length){ break; } if(i == u){ xy2[i] = 1; } } } /* for(int i=0;i<xy2.length;i++){ for(int j=0;j<xy2.length;j++){ int u = j * j + j + 41; if(u > xy2.length){ break; } if(i == u){ xy2[i] = 1; } } } */ } void draw() { background(0); stroke(0, 255, 255); fill(0, 255, 0); translate(width/2, height/2); int x = 0; int y = 0; int dx = 1; int dy = 0; int n = 1; for (int i = 1; i < width * height; i++ ) { if (xy1[i] == 1){ if(xy1[i] == xy2[i]){ stroke(255, 0, 0); } else{ stroke(0, 255, 255); } point(x, y); } if ( n * n + 1 == i ) { dy = (n % 2)*2-1; dx = 0; n++; } else if ( n * n - n + 1 == i) { dx = (n % 2)*2-1; dy = 0; } x += dx; y += dy; } } |
規則性がありそうなのに、数式にできないという、本当に素数は不思議です。
Categories: 未分類 タグ: Processing