#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], cnt = 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) cnt++;
}
double pi = 4.0 * cnt / n;
cout << "N=" << n << " -> pi≈" << pi << endl;
}
return 0;
}
/*
Q1. How does the estimate change with larger N?
= Increasing N improves the estimate and makes it closer to π.
Q2. How close does it get to actual π?
= For N=1000, error is ~±0.1; N=10000, error ~±0.03; N=100000, error ~±0.01.
Higher N gives values nearer to 3.14159.
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIHNyYW5kKHRpbWUoMCkpOwoKICAgIGludCBuVmFsc1tdID0gezEwMDAsIDEwMDAwLCAxMDAwMDB9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICBpbnQgbiA9IG5WYWxzW2ldLCBjbnQgPSAwOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAgICAgICAgIGRvdWJsZSB4ID0gKGRvdWJsZSlyYW5kKCkgLyBSQU5EX01BWDsKICAgICAgICAgICAgZG91YmxlIHkgPSAoZG91YmxlKXJhbmQoKSAvIFJBTkRfTUFYOwogICAgICAgICAgICBpZiAoeCp4ICsgeSp5IDw9IDEuMCkgY250Kys7CiAgICAgICAgfQogICAgICAgIGRvdWJsZSBwaSA9IDQuMCAqIGNudCAvIG47CiAgICAgICAgY291dCA8PCAiTj0iIDw8IG4gPDwgIiAtPiBwaeKJiCIgPDwgcGkgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9CgovKgpRMS4gSG93IGRvZXMgdGhlIGVzdGltYXRlIGNoYW5nZSB3aXRoIGxhcmdlciBOPwo9IEluY3JlYXNpbmcgTiBpbXByb3ZlcyB0aGUgZXN0aW1hdGUgYW5kIG1ha2VzIGl0IGNsb3NlciB0byDPgC4KClEyLiBIb3cgY2xvc2UgZG9lcyBpdCBnZXQgdG8gYWN0dWFsIM+APwo9IEZvciBOPTEwMDAsIGVycm9yIGlzIH7CsTAuMTsgTj0xMDAwMCwgZXJyb3IgfsKxMC4wMzsgTj0xMDAwMDAsIGVycm9yIH7CsTAuMDEuIApIaWdoZXIgTiBnaXZlcyB2YWx1ZXMgbmVhcmVyIHRvIDMuMTQxNTkuCiovCg==