质数,公倍数,公因素C++

目录

质数=素数

因素,共因素

倍素,共倍素


质数=素数

概念:大于1的数,且没有因素,例如3,5,7,11这种

代码:

判断一个数是不是质数

// 判断一个数是否为素数
bool is_prime(int n) {
    if (n <= 1) {
        return false;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

因素,共因素

因素:比如说2是4的因素,3是6的因素

共因素:比如说2是4和8的共因素,3是6和9的共因素

代码:

一个数求因素

//一个数的共因素
vector get_factors(int n) {
    vector ans;
    for (int i = 1; i <= n; i++) {
        if (n % i == 0) {
            ans.push_back(i);
        }
    }
    return ans;
}

2个数求共因素

vector get_two_common(int a, int b) {
    vectorans;
    int min_temp = min(a, b);
    for (int i = 1; i <= min_temp; i++) {
        if (a % i == 0 && b % i == 0) {
            ans.push_back(i);
        }
    }
    return ans;
}

3个数求共因素

vector get_three_common(int a, int b, int c) {
    vector ans;
    int min_temp = min(a, min(b, c));
    for (int i = 1; i < min_temp; i++) {
        if (a % i == 0 && b % i == 0 && c % i == 0) {
            ans.push_back(i);
        }
    }
    return ans;

}

总结一下:我们发现不管是求1个,还是多个,其实本质都是一样的,无非就是在if中多判断一下以及计算一个 min_temp


倍素,共倍素

倍素:比如说4是2的倍素,6是3的倍素

共倍素:比如说8是4和2的共倍素,18是6和3的共倍素

代码:

2个数求共倍素

这里就是先求出来这两个数的最大共因素,然后利用a*b/共因素就得到最小公倍数了

int get_two_lcm(int a, int b,int gys) {
    
    return a * b / gys;
}
vec = get_two_common(a, b);
int gys = vec[vec.size() - 1];//求出a,b的最大共因素
int lcm = get_two_lcm(a, b, gys);

3个数求共倍素

在2个基础之上,完成了a,b的公倍数lcm之后,对lcm和 c再求最大共因素gcd,然后lcm*c/gcd得到结果

你可能感兴趣的:(C++,数据结构,算法,c++)