Цель
Создайте программу / функцию, которая принимает входные данные N
, проверяет, являются ли N
случайные пары целых чисел относительно простыми, и возвращает sqrt(6 * N / #coprime)
.
TL; DR
Эти проблемы представляют собой симуляции алгоритмов, которые требуют только природы и вашего мозга (и, возможно, некоторых ресурсов многократного использования) для приближения Pi. Если вам действительно нужен Пи во время апокалипсиса зомби, эти методы не тратят патроны ! Есть еще восемь задач. Оформить запись в песочнице, чтобы дать рекомендации.
моделирование
Что мы моделируем? Итак, вероятность того, что два случайных целых числа являются относительно простыми (т.е. взаимно простыми или gcd == 1), такова 6/Pi/Pi
, поэтому естественным способом вычисления Pi будет выкопать два ведра (или горстки) камней; посчитай их; посмотрите, равен ли их gcd 1; повторение. После этого пару раз sqrt(6.0 * total / num_coprimes)
будет стремиться к Pi
. Если подсчет квадратного корня в постапокалиптическом мире заставляет вас нервничать, не волнуйтесь! Для этого есть метод Ньютона .
Как мы моделируем это?
- Принять вход
N
- Делайте следующее
N
время:- Равномерно генерировать случайные натуральные числа
i
иj
- С
1 <= i , j <= 10^6
- Если
gcd(i , j) == 1
:result = 1
- Else:
result = 0
- Равномерно генерировать случайные натуральные числа
- Возьмите сумму
N
результатов,S
- Возвращение
sqrt(6 * N / S)
Спецификация
- вход
- Гибкость, принимать входные данные любым из стандартных способов (например, параметр функции, STDIN) и в любом стандартном формате (например, String, Binary)
- Выход
- Гибкость, вывод на печать любым из стандартных способов (например, возврат, печать)
- Пробел, конечный и ведущий пробел приемлем
- Точность, укажите не менее 4 знаков после запятой (т.е.
3.1416
)
- счет
- Самый короткий код выигрывает!
Тестовые случаи
Ваш результат может не совпадать с этим из-за случайного шанса. Но в среднем вы должны получить примерно такую точность для заданного значения N
.
Input -> Output
----- ------
100 -> 3.????
10000 -> 3.1???
1000000 -> 3.14??
N=10^6
.
N = 1000000
или это нормально, если программа возвращает, например, переполнение стека, еслиN
оно слишком велико?