C(10,40) * C(3,40)
– на него поделим число благоприятных вариантов. Это выбор 10 выигрышных C(10,40); из 10 надо выбрать 2 попадания C(2,10); из оставшихся 30 надо выбрать 1 промахнувшийся C(1,30) и всех их перемножить. Итого Q(40,10,3,2) = C(10,40) * C(2,10) * C(1,30) / (C(10,40) * C(3,40))
Наверняка можно неплохо сократить что-то.C(N, M) = M! / ( N! * (M-N)! )
function nearest( $sample, $arr) {
$found = false;
foreach( $arr AS $row) {
if($row[0] <= $sample[0] && $row[1] <= $sample[1] && $row[2] <= $sample[2]) $found = $row;
else break;
}
return $found;
}
$data = [
[1, 1, 1],
[1, 2, 1],
[1, 2, 2],
[1, 5, 4],
[1, 5, 6],
[2, 1, 6],
[2, 2, 2],
];
echo implode(',', nearest( [1,5,5], $data)); // 1,5,4
23 -> 32
110 < 1001
Т.е. при переборе позиций меньше всего хотим двигать левую позицию, пока не переберем все варианты правой:0011
0101
0110
1001
1010
1100
Основное отличие ДКА и НКА состоит в том, что ДКА в процессе работы может находится только в одном состоянии, а НКА в нескольких состояниях одновременно.
Ax + By + C = 0
Или с угловым коэффициентом y = x(-A/B) - (C/B)
Параллельные прямые отличаются значением C
.n log n−n log log n + O(n)
1/x
, смещённый на 1 вправо и вверх:y = 1 / (1-(1/x)) = x / (x - 1) = 1 + 1 / (x - 1)
1/7 = 100/7 (/100) ≈ 0.14
x = 1.14
x - 1 = 0.14
1 / 0.14 = 100 / 14 = 50 / 7
с точностью до 2 знаков считаем целые в 5000 / 7
50 / 7 ≈ 7
... 700 (сотни)
... + 10 / 7 = 710 (десятки)
... + 30 / 7 = 714 (единицы)
итого 7.14
+1 = 8.14
Ответ: 8.14
function fibRange( from, to) {
if( isNaN(from) || isNaN(to) || from < 2 || from > to) {
throw "Bad argument(s)";
}
var root5 = Math.sqrt(5), phi = (1 + root5)/2, logPhi = Math.log(phi);
var nFrom = Math.ceil( Math.log((from - 0.5) * root5) / logPhi);
var nTo = Math.floor( Math.log((to+0.5) * root5) / logPhi);
function nthFib(n) {
return Math.round( (Math.pow(phi, n) - Math.pow( -phi, -n)) / (2 * phi - 1));
}
var a = nthFib(nFrom);
var result = [a];
if( nFrom === nTo) return result;
var i = nFrom + 1;
var b = nthFib(i);
while( i <= nTo) {
result.push(b);
b = a + b;
a = b - a;
i++;
}
return result;
}
fibRange(10,377)
/*
13,21,34,55,89,144,233,377
*/
function primes(n) {
var i, j, isPrime = Array(n), result= [];
for(i=2; i<n; i++) isPrime[i] = true;
for(i=2; i * i <= n; i++) {
if( isPrime[i]) {
for(j = i * i; j <= n; j += i) isPrime[j] = false;
}
}
for(i=2; i<n; i++) {
if(isPrime[i] === true) result.push(i);
}
return result;
}
function nearest(arr, total) {
var len = arr.length
, i
, bit
, sum
, n = Math.pow(2, len)
, currDist
, index = undefined
, dist = undefined
, result = []
;
for( i = 1; i < n; i++) {
sum = 0;
for( bit = 0; bit < len; bit++) {
if( i & (1 << bit)) sum += arr[bit];
}
currDist = Math.abs(total - sum);
if( typeof dist === 'undefined' || dist > currDist) {
index = i;
dist = currDist;
if( dist === 0) break;
}
}
for(bit = 0; bit < len; bit++) {
if( index & (1 << bit)) result.push(arr[bit]);
}
return result;
}
nearest([1,3,4,6,8], 12) // [1,3,8]
nearest([1,2,4,6,8], 12) // [2,4,6]
nearest([7,9,13,19,28], 12) // [13] dist = 1
nearest([7,9,13,19,28], 28) // [9,19] не [28] т.к. останавливается на первом найденном варианте
11111
до 5
.[1 .. 23е5]
. Можно рекурсивно набирать слева направо. На первую позицию годятся цифры 0, 1, 2
. На вторую при первой "2" 0, 1, 2, 3
, или любый при 0 или 1. С третьей по седьмую - любые.dt_created
дата-время поступления;dt_void
дата-время обнуления этого бонуса: через 2 года, а может, и другие правила введете;value_in
сколько начислено;value_out
сколько списано.