Mục tiêu
Tạo một chương trình / hàm lấy đầu vào N
, kiểm tra xem N
các cặp số nguyên ngẫu nhiên có tương đối nguyên tố hay không và trả về sqrt(6 * N / #coprime)
.
TL; DR
Những thách thức này là mô phỏng các thuật toán chỉ yêu cầu tự nhiên và bộ não của bạn (và có thể một số tài nguyên có thể sử dụng lại) để ước tính Pi. Nếu bạn thực sự cần Pi trong ngày tận thế zombie, những phương pháp này không lãng phí đạn ! Có tám thử thách sắp tới. Kiểm tra bài sandbox để đưa ra khuyến nghị.
Mô phỏng
Chúng ta đang mô phỏng cái gì? Chà, xác suất để hai số nguyên ngẫu nhiên tương đối nguyên tố (ví dụ: coprime hoặc gcd == 1) là 6/Pi/Pi
một cách tự nhiên để tính Pi sẽ là múc hai xô (hoặc số ít) đá; đếm chúng; xem nếu gcd của họ là 1; nói lại. Sau khi làm điều này một vài lần, sqrt(6.0 * total / num_coprimes)
sẽ có xu hướng Pi
. Nếu việc tính căn bậc hai trong thế giới hậu tận thế khiến bạn lo lắng, đừng lo lắng! Có phương pháp của Newton cho điều đó.
Làm thế nào chúng ta mô phỏng điều này?
- Lấy đầu vào
N
- Làm những
N
lần sau :- Tạo số nguyên dương ngẫu nhiên
i
vàj
- Với
1 <= i , j <= 10^6
- Nếu
gcd(i , j) == 1
:result = 1
- Khác:
result = 0
- Tạo số nguyên dương ngẫu nhiên
- Lấy tổng số
N
kết quả,S
- Trở về
sqrt(6 * N / S)
Đặc điểm kỹ thuật
- Đầu vào
- Linh hoạt, nhận đầu vào theo bất kỳ cách tiêu chuẩn nào (ví dụ: tham số hàm, STDIN) và ở bất kỳ định dạng chuẩn nào (ví dụ: Chuỗi, Nhị phân)
- Đầu ra
- Linh hoạt, cung cấp đầu ra theo bất kỳ cách tiêu chuẩn nào (ví dụ: trả lại, in)
- Không gian màu trắng, dấu vết và khoảng trắng hàng đầu được chấp nhận
- Độ chính xác, vui lòng cung cấp ít nhất 4 chữ số thập phân chính xác (nghĩa là
3.1416
)
- Chấm điểm
- Mã ngắn nhất sẽ thắng!
Các trường hợp thử nghiệm
Đầu ra của bạn có thể không phù hợp với những điều này, vì cơ hội ngẫu nhiên. Nhưng trung bình, bạn sẽ nhận được nhiều về độ chính xác này cho giá trị đã cho N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
hoặc có ổn không nếu chương trình trả về, ví dụ như tràn ngăn xếp nếuN
quá lớn?