[Odin] Generate pixels, save image[Odin] Generate pixels, save image

🔢

Prime Sums

Week 46, 2026

package main import "core:fmt" import "core:image" import "core:image/png" import "core:math" main :: proc () { W, H, F :: 1000, 1000, "result.png" fmt.println("Generating pixels...") pixels := make([] [3] byte, W * H) for &p, i in pixels { n := i + 1 n_is_prime := is_prime(n) s := sum(n) s_is_prime := is_prime(s) switch { case n_is_prime && s_is_prime : p = {255,0,0} case n_is_prime : p = {0,255,0} case s_is_prime : p = {0,0,255} } } fmt.println("Writing image...") write_png(pixels, W, H, F) fmt.println("All done.") } sum :: proc (n: int) -> (result: int) { M :: 1_000_000 assert(n>=0 && n<10*M) for d:=M; d>0; d/=10 do result += (n/d)%10 return } is_prime :: proc (n: int) -> bool { if n<2 do return false if n==2 || n==3 do return true if n%2==0 do return false @static cache: map [int] struct {} if n in cache do return true m := int(math.floor(math.sqrt(f64(n)))) for i:=3; i<=m; i+=2 { if n%i==0 do return false } cache[n] = {} return true } write_png :: proc (pixels: [] [3] byte, width, height: int, filename: string) { img, ok := image.pixels_to_image(pixels, width, height) assert(ok) err := png.save(filename, &img) assert(err == nil) }