, N & times; N, , :
n , Z, Y Z (n, 0,0), (0, n, 0) (0,0, ), x + y + z = n. , .
:
(5,0,0) (4,1,0) (3,2,0) (2,3,0) (1,4,0) (0,5,0)
(4,0,1) (3,1,1) (2,2,1) (1,3,1) (0,4,1)
(3,0,2) (2,1,2) (1,2,2) (0,3,2)
(2,0,3) (1,1,3) (0,2,3)
(1,0,4) (0,1,4)
(0,0,5)
, N & times; N, . :
- .
- . , .
,
. , .
- . ,
. ,
,
, .
,
.
- ,
.
, a b a lt b 25%, ( , , ).
(100 ) 1 000 000 , 116 ( 160), - 1 333 000 ( 2150 000).
( 10 000 000 , 11 000 000 150.)
, N, N & times; N.
function xyzLessCount(input) {
var list = [input[0]];
for (var i = 1; i < input.length; i++) {
var append = true;
for (var j = 0; j < list.length; j++) {
if (xyzLess(input[i], list[j])) {
append = false;
break;
}
if (xyzLess(list[j], input[i])) {
list[j] = input[i];
for (var k = list.length - 1; k > j; k--) {
if (xyzLess(list[k], list[j])) {
list.splice(k, 1);
}
}
append = false;
break;
}
}
if (append) list.push(input[i]);
}
return input.length - list.length;
function xyzLess(a, b) {
return a.x < b.x && a.y < b.y && a.z < b.z;
}
}
var points = [];
for (var i = 0; i < 1000000; i++) {
points.push({x: Math.random(), y: Math.random(), z: Math.random()});
}
document.write("1000000 → " + xyzLessCount(points));
Hide result