Вы должны решить, насколько важны ваши три правила.
Возможность 1: Если x * y как можно ближе к n, является истинным, то n = 17 => 1,17, а не 4,4. В этом случае вам нужна факторизация, и есть много способов сделать это, но код, подобный этому, прост:
for(i = floor(sqrt(n)) .. 1) {
if n % i ==0 {
x = i;
y = n/x;
break;
}
}
Возможность 2: Если важнее быть ближе друг к другу, можно ожидать, что n = 18 => 4,4, а не 3,6, и этот код будет работать. Это, однако, не факторы.
x=floor(sqrt(n))
y=floor(n/x)
Проблема, как написано, неразрешима без более четкой спецификации.
РЕДАКТИРОВАТЬ ------------
Теперь спецификация была отредактирована, теперь она определена, но вам нужно сделать Возможность 1, посмотреть, является ли результат простым (1 - одно из значений), а затем, если это повторить, выполнить Возможность 2. Однако я сомневаюсь это то, что учитель написал это как домашнее задание.