Вот программа на языке C для отображения простых множителей заданного числа:
#include <stdio.h>
void printPrimeFactors(int n) {
// Print the number of 2s that divide n
while (n % 2 == 0) {
printf("%d ", 2);
n = n / 2;
}
// n must be odd at this point. So we can skip one element (Note i = i + 2)
for (int i = 3; i * i <= n; i = i + 2) {
// While i divides n, print i and divide n
while (n % i == 0) {
printf("%d ", i);
n = n / i;
}
}
// This condition is to handle the case when n is a prime number greater than 2
if (n > 2)
printf("%d ", n);
}
int main() {
int number;
printf("Enter a positive integer: ");
scanf("%d", &number);
printf("Prime factors of %d are: ", number);
printPrimeFactors(number);
return 0;
}
В этой программе у нас есть функция printPrimeFactors
, которая принимает на вход целое число n
. Он итеративно делит n
на простые числа, начиная с 2, и печатает каждый простой множитель. Основная функция предлагает пользователю ввести положительное целое число, вызывает функцию printPrimeFactors
и отображает простые множители данного числа.
Вот несколько дополнительных методов поиска простых множителей:
-
Пробное деление. В этом методе мы можем выполнять итерацию от 2 до квадратного корня из заданного числа и проверять, делится ли число на каждую итерацию. Если оно делится, то это простой множитель.
-
Решето Эратосфена. Этот метод включает в себя генерацию всех простых чисел до заданного числа с использованием алгоритма решета. Затем мы проверяем, какое из этих простых чисел делит данное число.
-
Алгоритм Ро Полларда: это вероятностный алгоритм, который использует функцию для поиска множителей составных чисел. Это особенно полезно для больших чисел.
-
Метод факторизации Ферма. Этот метод использует разницу квадратов для факторизации числа. Он хорошо работает для чисел, которые являются произведением двух больших простых множителей.