Это, я считаю, довольно эффективная процедура, в которой перечислены все простые числа до 1000.
Он проверяет каждое число ($ x), чтобы увидеть, есть ли у него какие-либо факторы (кроме сам и 1, конечно).
Математически нет необходимости проверять все нижние числа как возможные факторы, а только младшие простые числа до квадратного корня из $ x. Это активируется путем хранения простых чисел, поскольку они находятся в массиве (который, я думаю, является стратегией, к которой обращался OP).
Как только первый основной коэффициент найден, мы знаем, что $ x является не простое, и поэтому дальнейшее тестирование этого значения $ x не требуется, и мы можем выйти из цикла foreach.
$primes = array();
for ($x = 2; $x <= 1000; $x++) {
$xIsPrime = TRUE;
$sqrtX = sqrt($x);
foreach ($primes as $prime) if ($prime > $sqrtX || ((!($x % $prime)) && (!$xIsPrime = FALSE))) break;
if ($xIsPrime) echo ($primes[] = $x) . "<br>";
}
Когда вы увеличиваете масштаб и нажимаете пиксель, это может представлять собой набор пикселей или наоборот, я думаю, вы понимаете, что, поскольку показать изображение является уменьшающим или сжатым, в зависимости от обстоятельств. Поэтому, в конце концов, что бы это ни было, вы получите пиксель, который не будет идеальным, но очень близким. Переходя к сути, учитывая, что при реализации @ekhumuro нет эскалации элементов, правильно использовать положение мыши относительно системы координат элемента, а не сцены, поскольку элемент может перемещаться, так что общее решение, считающее, что элемент не преобразуется, является:
def mousePressEvent(self, event):
if self._photo.isUnderMouse():
p = self._photo.mapToItem(self._photo, self.mapToScene(event.pos()))
self.photoClicked.emit(p.toPoint())
super(PhotoViewer, self).mousePressEvent(event)