y = x^2
Там на шаге x
от 0 до 1, y
растет от 0 до 1, на шаге от 3 до 4 y
растёт уже от 9 до 16, на 7. Взяв равномерно-случайную величину от 0 до 16, квадратный корень из неё неравномерно попадёт на диапазон от 0 до 4. Вероятнее на диапазон 3-4, чем на 0-1. И вероятность попадания в точку x будет прямо пропорциональна x.ceil( ln(x) / ln(10))
Специальный случай "единица" – для нее логарифм даст 0, поэтому длину единицы в квадрате приплюсуем вручную )0 000 -> 000 0
1 001 -> 100 4
2 010 -> 010 2
3 011 -> 110 6
4 100 -> 001 1
5 101 -> 101 5
6 110 -> 011 3
7 111 -> 111 7
А
до X
выделить по 1 ячейке.X
до B
, на каждое, выделить не по 1, а по F
ячеек.(X-A) + F * (B-X)
$sum = array_sum($a);
$rnd = rand() / getrandmax(); // от 0 до 1
$runningSum = 0;
foreach($a as $k => $v) {
$runningSum += $v / $sum;
if ($runningSum >= $rnd) {
$key = $k;
break;
}
}
if (!$key) $key = $k;
echo "Выпало: " . $key . PHP_EOL;
YX| 0 1 2 3 4
--|-----------
0 | 0 1 0 0 1
1 | 1 1 0 1 1
2 | 1 0 1 1 0
3 | 0 1 1 0 0
4 | 0 0 1 0 0
[(1,0), (0,1), (1,1), (0,2)],
[(4,0), (3,1), (4,1), (2,2), (3,2), (1,3), (2,3), (2,4)]
N
на остаток деления S % n = 0
Вдруг, найдётся число, которое надо просто повторить m
раз, чтобы получить S
N
на разницу: если найдётся разница в 1, можно получить любое число через эти дваN
Подзадача та же, получить 1. Есть 1 – есть любое целое.P
делится без остатка на (F - P)
function f(F, P) {
const D = F - P; // стоимость напитка без посуды
// сколько останется денег если 1 раз купить, выпить и сдать?
function drink(m) {
const n = Math.floor(m / F);
if (n <= 0) throw "Nope";
return m - n * D;
}
for( let M = P + D * Math.ceil((F + 1) / D); M <= D * Math.floor(2 * 109 / D); M += D) {
try {
if (F === drink(drink(drink(drink(M))))) return M;
} catch(e) {
continue;
}
}
}
f(7, 3) // 83
import math
F,P = map(int, input("Введите два целых через пробел:").split())
def bruteforce(F, P):
D = F - P
def drink(m):
n = math.floor(m / F)
if 0 == n:
raise Exception()
return m - n * D
for M in range(P, int(1e9), D):
try:
rem = drink(drink(drink(drink(M))))
if (F == rem):
return M
except Exception as E:
pass
return "Нет решения"
print(bruteforce(F, P))
[ a*x + b, a*sin(b*x) + c]
на данных, подбирая коэффициенты, минимизируя отклонения. Посчитать сумму квадратов отклонений данных от теории, сделать вывод, попадает идеально или нет.Рейтинг = Нижняя граница доверительного интервала Вильсона (Wilson) для параметра Бернулли
(0, 0)
задача упрощается, т.к. координаты вершин совпадают с векторами в них из центра.function scale( k, center, points) {
return points.map( p => p.map( (x, i) => center[i] + k * (x - center[i])));
}
scale(
2, // в два раза
[3, 1], // относительно точки (3,1)
[ [0,0], [1,1], [3,1], [10,10] ] // этот четырёхугольник
)
// [ [-3, -1], [-1, 1], [3, 1], [17, 19] ]
бесконечность минус 1
: