All SolutionsAll Solutions
🔢
Prime Sums
Week 46, 2026
Generate pixels, save image | greenya | Odin Solutions
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)
}