Нахождение общих простых делителей - PullRequest
0 голосов
/ 17 января 2019

Я написал программу для поиска общих простых делителей, наибольших общих делителей и наименьших общих кратных. Мой метод - сначала найти gcd , а затем разложить gcd на простые множители. Это мой код:

#include <stdio.h>
#include <stdlib.h>

int prime(int x) {
    int y;
    for (y = 2; y < x; y++) {
        if (x % y != 0)
            continue;
        else
            return 1;
    }
    return 0;
}
int main() {
    int n, m, i, gcd, lcm, k;
    // Input m and n
    printf("Enter m = ");
    scanf("%d",&m);
    printf("Enter n = ");
    scanf("%d",&n);
    // Common prime divisors
    lcm = m * n;
    while (m != n)
        if (m > n) m = m - n;
        else n = n - m;
    gcd = m;
    lcm = lcm / gcd;
    if (m <= 1)
        printf("No common prime divisors");
    else {
        printf("Common prime divisors: ");
        for (i = 2; i <= m - 1; i++) {
            k = prime(i);
            if (k = 1)
                if (m % i == 0)
                    printf("%d  ", i);
        }
    }
    printf("\nGreatest common divisor: %d\nLeast common multiple: %d", gcd, lcm);
    return 0;
}

Кажется, что программа работает, но когда я набираю m = 2 и n = 4, общие простые делители, которые должны быть равны '2', не появляются.
Так что не так в моем коде?

1 Ответ

0 голосов
/ 17 января 2019

Если m = 2, то цикл ниже не может быть выполнен, потому что 2-1 = 1, и i начинается с 2.

for (i = 2; i <= m - 1; i++) 

Кроме того, if (k=1) является назначением. Вы хотите if (k==1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...