package main

import (
	"fmt"
	"os"
	"runtime/pprof"
)

// jumlahKuadratMod menjumlahkan (i*i)%101 untuk i dari 0 sampai n-1.
func jumlahKuadratMod(n int) int64 {
	var total int64
	for i := range n {
		x := int64(i)
		total += (x * x) % 101
	}
	return total
}

// hitungPrima menghitung banyaknya bilangan prima di bawah batas
// dengan uji pembagian terhadap setiap kandidat.
func hitungPrima(batas int) int {
	jumlah := 0
	for n := 2; n < batas; n++ {
		prima := true
		for d := 2; d*d <= n; d++ {
			if n%d == 0 {
				prima = false
				break
			}
		}
		if prima {
			jumlah++
		}
	}
	return jumlah
}

func main() {
	berkas, err := os.CreateTemp("", "cpu-*.prof")
	if err != nil {
		fmt.Println("gagal membuat berkas profil:", err)
		return
	}

	if err := pprof.StartCPUProfile(berkas); err != nil {
		fmt.Println("gagal memulai profil CPU:", err)
		return
	}
	hasilKuadrat := jumlahKuadratMod(300_000_000)
	hasilPrima := hitungPrima(1_500_000)
	pprof.StopCPUProfile()
	berkas.Close()

	fmt.Println("jumlah kuadrat mod:", hasilKuadrat)
	fmt.Println("prima di bawah 1500000:", hasilPrima)
	fmt.Println("profil CPU ditulis: true")
}
