@quarttt

Как разложить число на множители(си)?

Заполните тело функции, которая принимает число n​​ и с помощью указателей заполняет два числа множителями a​​ и b​​ такими, что:

Если n=1 или n простое, то a = 1, b = n.
Если n составное, то мы ищем ab=n​​ такие, что 1< a<= b
a - наименьший множитель.
Гарантируется, что n>0​​.

void factorize( int n, int* a, int* b )
{
...
}

Не получается остановиться только на двух множителях. Помогите, пожалуйста, написать функцию
Примерно понял как посчитать, но с написанием программы туговато. Вот что придумал:
•Половина чисел - чётные;
•Если число нечётное, то проверять есть смысл только нечётные числа.
•Делители числа не превышают его половины. А вообще даже квадратного корня из него
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ответы на вопрос 2
ZIK1337
@ZIK1337
Используйте алгоритм Ферма
Ответ написан
Комментировать
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Не получается остановиться только на двух множителях.


Приведите ваш код, который не останавливается. По идее, достаточно в него вставить return после нахождения первой пары множителей.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы