A+(B-A, P-A)/|B-A|^2 * (B-A)
(X, Y) - это скалярное произведение двуз веткоров. B-A - вектор от A до B, что есть просто разность координат точек. |X|^2 - длина вектора X в квадрате.Point Subtract(Point, Point)
, double ScalarMult(Point, Point)
и Point Multiply(double, Point)
. Для подсчета квадрата длины вектора можно просто перемножить его на себя скалярно. Тогда формулу можно прямо так и записать в коде.else break;
? Как только вы встретите первое ребро, которое не лучше текущего минимума, вы выходите из цикла.long long i = 2;
while (i*i <= number) {
if (number % i == 0) {
while (number % i == 0) number /= i;
cout << i;
}
++i;
}
if (number > 1) cout << number;
number /= i;
), пока оно делится (может, придется кучу раз сокращать), то не надо внутреннего цикла - i всегда будет простым.