Программа на языке C для поиска простых множителей числа | Несколько методов

Вот программа на языке 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и отображает простые множители данного числа.

Вот несколько дополнительных методов поиска простых множителей:

  1. Пробное деление. В этом методе мы можем выполнять итерацию от 2 до квадратного корня из заданного числа и проверять, делится ли число на каждую итерацию. Если оно делится, то это простой множитель.

  2. Решето Эратосфена. Этот метод включает в себя генерацию всех простых чисел до заданного числа с использованием алгоритма решета. Затем мы проверяем, какое из этих простых чисел делит данное число.

  3. Алгоритм Ро Полларда: это вероятностный алгоритм, который использует функцию для поиска множителей составных чисел. Это особенно полезно для больших чисел.

  4. Метод факторизации Ферма. Этот метод использует разницу квадратов для факторизации числа. Он хорошо работает для чисел, которые являются произведением двух больших простых множителей.