// Problem 2: Monte Carlo Estimation of π
#include <bits/stdc++.h>
using namespace std;
int main() {
srand(time(0));
int Nvals[] = {1000, 10000, 100000};
for (int i = 0; i < 3; i++) {
int N = Nvals[i], in = 0;
for (int j = 0; j < N; j++) {
double x = (double)rand() / RAND_MAX;
double y = (double)rand() / RAND_MAX;
if (x * x + y * y <= 1.0) in++;
}
double pi = 4.0 * in / N;
cout << "N=" << N << " -> pi≈" << pi << endl;
}
return 0;
}
/*
Q1. How does the estimate change with larger N?
= With larger N, the estimate becomes more accurate and converges to π.
Q2. How close does it get to actual π?
= For N=1000, error is about ±0.1. For N=10000, error ≈ ±0.03.
For N=100000, error ≈ ±0.01. Larger N gives closer results to 3.14159.
*/
Ly8gUHJvYmxlbSAyOiBNb250ZSBDYXJsbyBFc3RpbWF0aW9uIG9mIM+ACgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewogICAgc3JhbmQodGltZSgwKSk7CgogICAgaW50IE52YWxzW10gPSB7MTAwMCwgMTAwMDAsIDEwMDAwMH07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewogICAgICAgIGludCBOID0gTnZhbHNbaV0sIGluID0gMDsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykgewogICAgICAgICAgICBkb3VibGUgeCA9IChkb3VibGUpcmFuZCgpIC8gUkFORF9NQVg7CiAgICAgICAgICAgIGRvdWJsZSB5ID0gKGRvdWJsZSlyYW5kKCkgLyBSQU5EX01BWDsKICAgICAgICAgICAgaWYgKHggKiB4ICsgeSAqIHkgPD0gMS4wKSBpbisrOwogICAgICAgIH0KICAgICAgICBkb3VibGUgcGkgPSA0LjAgKiBpbiAvIE47CiAgICAgICAgY291dCA8PCAiTj0iIDw8IE4gPDwgIiAtPiBwaeKJiCIgPDwgcGkgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9CgovKgpRMS4gSG93IGRvZXMgdGhlIGVzdGltYXRlIGNoYW5nZSB3aXRoIGxhcmdlciBOPwo9IFdpdGggbGFyZ2VyIE4sIHRoZSBlc3RpbWF0ZSBiZWNvbWVzIG1vcmUgYWNjdXJhdGUgYW5kIGNvbnZlcmdlcyB0byDPgC4KClEyLiBIb3cgY2xvc2UgZG9lcyBpdCBnZXQgdG8gYWN0dWFsIM+APwo9IEZvciBOPTEwMDAsIGVycm9yIGlzIGFib3V0IMKxMC4xLiBGb3IgTj0xMDAwMCwgZXJyb3Ig4omIIMKxMC4wMy4gCkZvciBOPTEwMDAwMCwgZXJyb3Ig4omIIMKxMC4wMS4gTGFyZ2VyIE4gZ2l2ZXMgY2xvc2VyIHJlc3VsdHMgdG8gMy4xNDE1OS4KKi8K