Общий делитель на php

Вместо введения. Разрабатываю на досуге систему – экономический симулятор, забавы ради, можно сказать.

Возникла тут потребность в масштабировании изображения. Увеличение, по замыслу, для простоты расчётов и представления должно быть кратным. Суть задачи в том, чтобы поделить изображение на равные части, и предоставлять их в увеличенном размере. Ясное дело, для этого необходимо найти делитель для обеих сторон (x, y) изображения. Почитав маны по математическим функциям php не нашёл ничего подходящего, и тогда набросал метод, которым хочу поделиться с вами.

И так, встречайте! Функция getDivisors()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * @autor samizdam
 * возвращает массив общих делителей для двух чисел, 
 * начиная с большего, заканчивая, ЧСХ, единицей. 
 */
function getDivisors($x = 1, $y = 1)
{
	// приводим к целому типу аргументы
	$x = (int) $x;
	$y = (int) $y;
	// узнаём наименьший из аргументов
	if($x < $y)
		$divisor = $x;
	else 
		$divisor = $y;
	$divisorsArr = array(); 
	for($i = $divisor; $i >= 1; $i--)
	{
		$xDiv = $x/$i;
		$yDiv = $y/$i;
		if(round($xDiv) == $xDiv && round($yDiv) == $yDiv)	
			$divisorsArr[] = $i;
	}
	return $divisorsArr;
}

Пока особо не тестировал, но работает как надо. Буду рад критике и замечаниям.

Эта запись была опубликована в рубрике Статьи-заметки и отмечена метками , , . Добавить в закладки ссылку.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>