C语言--质数算法和最大公约数算法

news2024/11/20 7:03:23

文章目录

        • 1.在C语言中,判断质数的常见算法有以下几种:
          • 1.1.试除法(暴力算法):
          • 1.2.优化试除法:
          • 1.3.埃拉托色尼筛法:
          • 1.4.米勒-拉宾素性检验:
          • 1.5.线性筛法:
          • 1.6.费马小定理:
          • 1.7.素性检验:
        • 2.在C语言中,求两个数的最大公约数的常见算法有以下几种:
          • 2.1.辗转相减法
          • 2.2.辗转相除法
            • 2.2.1.迭代实现:
            • 2.2.2.递归实现:
          • 2.3. `Stein`算法
          • 2.4.`Lehmer`算法和`Schönhage-Strassen`算法
            • 2.4.1.`Lehmer`算法
            • 2.4.2. `Schönhage-Strassen`算法

1.在C语言中,判断质数的常见算法有以下几种:
  1. 试除法(暴力算法):从2开始依次除以每个小于该数的自然数,如果有余数为0的,则该数不是质数。

  2. 优化试除法:只需要测试小于等于该数平方根的自然数,因为如果大于该数平方根的除数能整除该数,那么小于该数平方根的除数一定也能整除该数。

  3. 埃拉托色尼筛法:从2开始,将数字的倍数都标记为合数,就可以找到所有的质数。

  4. 米勒-拉宾素性检验:依靠不同的随机数,可以判断质数是否为合数,准确率高。

  5. 线性筛法:从小到大依次筛选质数,并标记其倍数为合数。

  6. 试除法(暴力算法):

  7. 素性检验

1.1.试除法(暴力算法):
#include <stdio.h>

int isPrime(int n) 
{
    for (int i = 2; i < n; i++) 
    {
        if (n % i == 0) 
        {
            return 0;   // 不是质数
        }
    }
    return 1;   // 是质数
}

int main() 
{
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    if (isPrime(n)) {
        printf("%d是质数\n", n);
    } else {
        printf("%d不是质数\n", n);
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

1.2.优化试除法:
#include <stdio.h>
#include <math.h>

int isPrime(int n) 
{
    for (int i = 2; i <= sqrt(n); i++) 
    {
        if (n % i == 0) 
        {
            return 0;   // 不是质数
        }
    }
    return 1;   // 是质数
}

int main() 
{
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    if (isPrime(n)) {
        printf("%d是质数\n", n);
    } else {
        printf("%d不是质数\n", n);
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

1.3.埃拉托色尼筛法:
#include <stdio.h>

void eratosthenes(int n) 
{
    int prime[n + 1];
    for (int i = 2; i <= n; i++) 
    {
        prime[i] = 1;
    }
    for (int i = 2; i * i <= n; i++) 
    {
        if (prime[i]) 
        {
            for (int j = i * i; j <= n; j += i) 
            {
                prime[j] = 0;
            }
        }
    }
    printf("2");
    for (int i = 3; i <= n; i += 2) 
    {
        if (prime[i]) 
        {
            printf(", %d", i);
        }
    }
    printf("\n");
}

int main() 
{
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    if (1 == n)
    {
        printf("1不是质数\n");
        return 0;
    }
    printf("%d以内的所有质数:\n", n);
    eratosthenes(n);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

1.4.米勒-拉宾素性检验:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

long long power(long long a, long long n, long long p) 
{
    long long ans = 1;
    while (n > 0) 
    {
        if (n & 1) 
        {
            ans = (ans * a) % p;
        }
        a = (a * a) % p;
        n >>= 1;
    }
    return ans;
}

int miller_rabin(long long n, int k) 
{
    if (n == 2 || n == 3) 
    {
        return 1;   // 质数
    }
    if (n == 1 || n % 2 == 0) 
    {
        return 0;   // 非质数
    }
    long long d = n - 1;
    while (d % 2 == 0) 
    {
        d /= 2; // 分解为 d * 2^r
    }
    for (int i = 0; i < k; i++) 
    {
        long long a = rand() % (n - 3) + 2; // 2 ~ n-2 之间随机选取一个数 a
        long long x = power(a, d, n);
        if (x == 1 || x == n - 1) 
        {
            continue;
        }
        int flag = 0;   // 判断循环中是否需要继续
        // 执行 r-1 次循环,检验是否有 x^d, x^2d, …, x^(2^(r-1)*d) 都与 n-1 同余
        for (long long r = d; r != n - 1; r <<= 1) 
        {
            x = (x * x) % n;
            if (x == 1) 
            {
                return 0;   // 是合数
            }
            if (x == n - 1) 
            {
                flag = 1;
                break;
            }
        }
        if (!flag) 
        {
            return 0;   // 是合数
        }
    }
    return 1;   // 是质数
}

int main() 
{
    long long n;
    int k;
    printf("请输入一个整数:");
    scanf("%lld", &n);
    printf("请设置测试次数 k:");
    scanf("%d", &k);
    int flag = miller_rabin(n, k);
    if (flag) 
    {
        printf("%lld是质数\n", n);
    } 
    else 
    {
        printf("%lld不是质数\n", n);
    }
    return 0;
}

解释一下这里的测试次数k:

在算法中随机选择不同的基数进行多次检测。通过增加测试次数 k,可以提高算法的准确性,减少错误判定合数为质数的可能性。在每次测试中,随机选择不同的基数进行检测,如果所有测试都通过,那么被检测的数更有可能是质数。总之k 的值决定了算法进行随机测试的次数,通过多次测试提高了判定质数的可靠性。(一般来说k的值选取范围是5-15)

在这里插入图片描述
在这里插入图片描述

1.5.线性筛法:
#include <stdio.h>

void linear_sieve(int n) 
{
    int prime[n + 1], cnt = 0;
    int factor[n + 1];
    for (int i = 2; i <= n; i++) 
    {
        if (!prime[i]) 
        {
            prime[i] = i;
            factor[i] = i;
            cnt++;
        }
        for (int j = 1; j <= cnt && prime[i] >= prime[j] && i * prime[j] <= n; j++) 
        {
            prime[i * prime[j]] = prime[j];
            if (prime[i] == prime[j]) 
            {
                factor[i * prime[j]] = factor[i] * factor[j];
            } 
            else 
            {
                factor[i * prime[j]] = factor[i] * prime[j];
            }
        }
    }
    printf("2");
    for (int i = 3; i <= n; i += 2) 
    {
        if (prime[i] == i) 
        {
            printf(", %d", i);
        }
    }
    printf("\n");
}

int main() 
{
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    if (1 == n)
    {
        printf("1不是质数\n");
        return 0;
    }
    printf("%d以内的所有质数:\n", n);
    linear_sieve(n);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

1.6.费马小定理:

费马小定理是一种用于判断质数的方法。如果一个数 n n n 是质数,且 a a a 是小于 n n n 的任意正整数,则 a n − 1 ≡ 1 ( m o d n ) a^{n-1} \equiv 1 \pmod n an11(modn)

具体的判断方法为:随机选取一个整数 a a a,计算 a n − 1   m o d   n a^{n-1} \bmod n an1modn 的值,如果等于1,则 n n n 可能是质数。

但是,存在一些合数也满足费马小定理,即被称为费马伪素数。因此,费马小定理不是完全可靠的判断方法。需要进行多次测试,才能提高正确率。

下面是使用费马小定理进行判断的代码示例:

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

long long power(long long a, long long n, long long p) 
{
    long long ans = 1;
    while (n > 0) 
    {
        if (n & 1) 
        {
            ans = (ans * a) % p;
        }
        a = (a * a) % p;
        n >>= 1;
    }
    return ans;
}

int fermat_primality_test(long long n, int k) 
{
    if (n == 2 || n == 3) 
    {
        return 1;   // 质数
    }
    if (n == 1 || n % 2 == 0) 
    {
        return 0;   // 非质数
    }
    for (int i = 0; i < k; i++) 
    {
        long long a = rand() % (n - 2) + 2; // 2 ~ n-1 之间随机选取一个数 a
        if (power(a, n - 1, n) != 1) 
        {
            return 0;   // 是合数
        }
    }
    return 1;   // 是质数
}

int main() 
{
    long long n;
    int k;
    printf("请输入一个整数:");
    scanf("%lld", &n);
    printf("请设置测试次数 k:");
    scanf("%d", &k);
    int flag = fermat_primality_test(n, k);
    if (flag) 
    {
        printf("%lld是质数\n", n);
    } 
    else 
    {
        printf("%lld不是质数\n", n);
    }
    return 0;
}

在这里插入图片描述
在这里插入图片描述

1.7.素性检验:

素性检验是一种比费马小定理更加精确的判断质数的方法,常用的有 Miller-Rabin 素性检验和 AKS 算法。

Miller-Rabin 素性检验已经在第四个示例中介绍过了,这里再介绍一下 AKS 算法。

AKS 算法是一种基于代数学理论的判断质数的算法,可以在多项式时间内实现。它的时间复杂度为 O ( log ⁡ 12 n ) O(\log ^{12} n) O(log12n),比 Miller-Rabin 算法还要慢,但是它的正确率非常高,可以判断非常大的质数。

AKS 算法的核心思想是利用柿子(binomial theorem)和模 p 下的同余关系,对多项式进行模运算,最终得到一个判断质数的结论。

这里不再给出 AKS 算法的代码实现,感兴趣的话可以自己百度一下。😉

2.在C语言中,求两个数的最大公约数的常见算法有以下几种:
  1. 辗转相减法
  2. 辗转相除法
  3. Stein算法
  4. 拓展
2.1.辗转相减法

辗转相减法也叫欧几里得算法,是求解两个正整数的最大公约数的一种简便算法,其基本思想是利用两数的差的绝对值不断递归,直到两数相等为止,此时所得的数即为最大公约数。

具体的实现过程为:

  1. 如果两个数相等,则它们的最大公约数即为它们本身;
  2. 如果其中一个数为0,则另一个数即为最大公约数;
  3. 如果两个数都不相等且都不为0,则将它们中较大的数减去较小的数,并用得到的差替换较大的数,然后回到第1步。

以下是使用辗转相减法求两个数的最大公约数的实现:

#include <stdio.h>

int gcd(int a, int b) 
{
    if (a == b) 
    {
        return a;
    }
    if (a == 0) 
    {
        return b;
    }
    if (b == 0) 
    {
        return a;
    }
    if (a > b) 
    {
        return gcd(a - b, b);
    } 
    else 
    {
        return gcd(a, b - a);
    }
}

int main() 
{
    int a, b;
    printf("请输入两个数:");
    scanf("%d %d", &a, &b);
    int g = gcd(a, b);
    printf("%d 和 %d 的最大公约数是 %d\n", a, b, g);
    return 0;
}

在这里插入图片描述
在这里插入图片描述

2.2.辗转相除法

辗转相除法(欧几里得算法)在C语言中的实现可以采用迭代或递归两种方式。

2.2.1.迭代实现:
#include <stdio.h>

int gcd(int a, int b) 
{
    while (b != 0) 
    { // 当b不为零时继续循环
        int temp = a % b; // 计算a除以b的余数
        a = b; // 将b赋值给a,准备下一轮迭代
        b = temp; // 将上一轮的余数赋值给b
    }
    return a; // 循环结束后,a即为最大公约数
}

int main() 
{
    int num1, num2;
    
    printf("请输入两个整数:");
    scanf("%d %d", &num1, &num2);

    // 确保num1总是较大的数,这样可以简化逻辑
    if (num1 < num2) 
    {
        int temp = num1;
        num1 = num2;
        num2 = temp;
    }

    int result = gcd(num1, num2);
    printf("这两个数的最大公约数是:%d\n", result);

    return 0;
}

在这里插入图片描述

在这里插入图片描述

2.2.2.递归实现:
#include <stdio.h>

int gcd(int a, int b) 
{
    // 当b为0时,a即为最大公约数
    if (b == 0)
        return a;
    else
        // 递归调用gcd函数,将b作为新的a,a除以b的余数作为新的b
        return gcd(b, a % b);
}

int main() 
{
    int num1, num2;

    printf("输入两个整数: ");
    scanf("%d %d", &num1, &num2);

    // 输出两个数的最大公约数
    printf("The GCD of %d and %d is %d\n", num1, num2, gcd(num1, num2));

    return 0;
}
  

在这里插入图片描述

在这里插入图片描述

2.3. Stein算法

Stein算法,也叫二进制 GCD 算法,是一种用于计算两个正整数的最大公约数的算法。它比辗转相除法更加高效,因为它的操作只涉及移位、加减运算和条件选择,消耗的时间和空间都比辗转相除法少。

具体的实现过程为:

  1. 把两个数都右移一位,直到两个数都为奇数;
  2. 如果a<b,则交换a和b;
  3. 计算d=a-b,如果d=0,则a即为最大公约数,结束;
  4. 把d右移一位,即d=d/2;
  5. 重复步骤3-4,直到d=1;
  6. 求出a和b的公共因子2的k次幂,即g=2^k,其中k是使a和b均为偶数的因子,把a和b都右移k位,此时就回到步骤1。

以下是使用Stein算法求两个数的最大公约数的实现:

#include <stdio.h>

int gcd(int a, int b) 
{
    if (a == 0 || b == 0) 
    {
        return a + b;
    }
    int k = 0;
    while ((a & 1) == 0 && (b & 1) == 0) 
    {
        a >>= 1;
        b >>= 1;
        k++;
    }
    while ((a & 1) == 0) 
    {
        a >>= 1;
    }
    do {
        while ((b & 1) == 0)
        {
            b >>= 1;
        }
        if (a > b) 
        {
            int t = b;
            b = a;
            a = t;
        }
        b -= a;
    } while (b != 0);
    return a << k;
}

int main() 
{
    int a, b;
    printf("请输入两个数:");
    scanf("%d %d", &a, &b);
    int g = gcd(a, b);
    printf("%d 和 %d 的最大公约数是 %d\n", a, b, g);
    return 0;
}

Stein算法比辗转相减法和辗转相除法更加高效,特别是在处理大整数时。

在这里插入图片描述

在这里插入图片描述

2.4.Lehmer算法和Schönhage-Strassen算法

除了辗转相减法、辗转相除法和Stein算法外,还有更好的算法,例如,它们能够在O(N(logN)^2)的时间复杂度内计算出两个N位整数的最大公约数,但是实现起来比较复杂,需要涉及到高精度计算和复杂的数论知识。

Lehmer算法是一种基于欧几里得算法的改进算法,它利用了欧几里得算法的思想,但是通过一些优化使得执行次数更少,效率更高。它的基本思想是先对两个数进行预处理,然后再利用这些预处理结果进行计算。

Schönhage-Strassen算法是一种基于快速傅里叶变换的算法,它能够在O(N(logN)^2)时间复杂度内计算出两个N位整数的最大公约数。它的基本思想是把计算最大公约数的问题转化为计算多项式的问题,然后利用快速傅里叶变换进行多项式的乘法和除法。

2.4.1.Lehmer算法

下面是使用Lehmer算法求两个数的最大公约数的实现:

#include <iostream>
#include <vector>
using namespace std;

// 求p^n
int pow(int p, int n)     
{
    int res = 1;
    for (int i = 0; i < n; i++) 
    {
        res *= p;
    }
    return res;
}

// 把n表示成p进制的形式,返回各个位的系数
vector<int> convert(int n, int p) 
{
    vector<int> digits;
    while (n > 0) 
    {
        digits.push_back(n % p);
        n /= p;
    }
    return digits;
}

// Lehmer算法
int lehmer(int a, int b) 
{
    if (a == 0 || b == 0) 
    {
        return a + b;
    }
    int p = 10, q = pow(p, 1.5);
    vector<int> r = convert(a, p), s = convert(b, p);
    int n = r.size(), m = s.size();
    while (m > 0) 
    {
        int t = n - m;
        int k = r[n - 1] * q + r[n - 2];
        int l = s[m - 1] * q + s[m - 2];
        if (r[n - 1] == s[m - 1] && k < l * q || k < l * q - 1) 
        {
            t--;
            k = (k + p * r[n - 3]) * p + r[n - 4];
        }
        int u = (k - l) % q * pow(p, t);
        if (k < l) 
        {
            u -= pow(p, t + 1);
        }
        r.erase(r.begin() + t, r.end());
        for (int i = 0; i < m - 1; i++) 
        {
            r[i] -= u * s[i];
            if (r[i] < 0) 
            {
                r[i] += p;
                r[i + 1]--;
            }
        }
        while (r.back() == 0) 
        {
            r.pop_back();
        }
        n = r.size();
        swap(r, s);
        swap(m, n);
    }
    return s[0];
}

int main() 
{
    int a, b;
    cout << "请输入两个数:";
    cin >> a >> b;
    int g = lehmer(a, b);
    cout << a << " 和 " << b << " 的最大公约数是 " << g << endl;
    return 0;
}

在这里插入图片描述
在这里插入图片描述

注意

我这个windows上面的wsl没有装这个头文件,大家可以在ubuntu虚拟机里面试一试,这个有时间再弄

2.4.2. Schönhage-Strassen算法

下面是使用Schönhage-Strassen算法求两个数的最大公约数的实现:

#include <iostream>
#include <vector>
#include <algorithm>
#include <complex>
using namespace std;

const double PI = acos(-1);
typedef complex<double> comp;

void bit_reverse_copy(const vector<comp>& a, vector<comp>& b) 
{
    int n = a.size();
    int p = 0;
    for (int i = 0; i < n; i++) 
    {
        b[p] = a[i];
        for (int j = n / 2; (p ^= j) < j; j /= 2);
    }
}

// 快速傅里叶变换
void fft(vector<comp>& a, int inv) 
{
    int n = a.size();
    vector<comp> b(n);
    bit_reverse_copy(a, b);
    for (int h = 1; h < n; h <<= 1) 
    {
        for (int j = 0; j < n; j += h << 1) 
        {
            comp w(1, 0);
            for (int k = 0; k < h; k++) 
            {
                comp t = w * b[j + k + h];
                b[j + k + h] = b[j + k] - t;
                b[j + k] += t;
                w *= comp(cos(PI * inv * k / h), sin(PI * inv * k / h));
            }
        }
    }
    if (inv == -1) 
    {
        for (int i = 0; i < n; i++) 
        {
            b[i] /= n;
        }
    }
    a.swap(b);
}

// 计算两个N位整数的最大公约数
int ss_gcd(string a, string b) 
{
    int n = a.size(), m = b.size();
    int N = 1;
    while (N < n + m) 
    {
        N <<= 1;
    }
    vector<comp> A(N), B(N);
    for (int i = 0; i < n; i++) 
    {
        A[i] = a[n - 1 - i] - '0';
    }
    for (int i = 0; i < m; i++) 
    {
        B[i] = b[m - 1 - i] - '0';
    }
    fft(A, 1);
    fft(B, 1);
    vector<comp> C(N);
    for (int i = 0; i < N; i++) 
    {
        C[i] = A[i] * B[i];
    }
    fft(C, -1);
    reverse(C.begin() + 1, C.end());
    while (C.size() > 1 && C.back().real() == 0) 
    {
        C.pop_back();
    }
    string r;
    for (int i = C.size() - 1; i >= 0; i--) 
    {
        r += char(C[i].real() + 0.5) + '0';
    }
    while (r.size() > 1 && r.back() == '0') 
    {
        r.pop_back();
    }
    return stoi(r);
}

int main() 
{
    string a, b;
    cout << "请输入两个数:";
    cin >> a >> b;
    int g = ss_gcd(a, b);
    cout << a << " 和 " << b << " 的最大公约数是 " << g << endl;
    return 0;
}

在这里插入图片描述

注意

我这个windows上面的wsl没有装这个头文件,大家可以在ubuntu虚拟机里面试一试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1389475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s---配置资源管理

目录 配置资源管理的方式 secret pod如何来引用secret&#xff1f;&#xff1f;&#xff1f; 陈述式创建&#xff1a; 声明式创建 Secret创建加密文件 使用token挂载 环境变量使用 docker-registry ConfigMap 陈述式 热更新 总结&#xff1a; 配置资源管理的方式 …

OJAC近屿智能带你解读:AIGC必备知识之Lang Chain

Look&#xff01;&#x1f440;我们的大模型商业化落地产品&#x1f4d6;更多AI资讯请&#x1f449;&#x1f3fe;关注Free三天集训营助教在线为您火热答疑&#x1f469;&#x1f3fc;‍&#x1f3eb; Lang Chain, 是一种先进的语言模型链技术&#xff0c;旨在通过串联多个专业…

js逆向第21例:猿人学第20题新年挑战

文章目录 一、前言二、定位加密参数1、定位wasm加密2、反编译wasm3、定位sign加密三、代码实现四、参考文献一、前言 新春福利:抓取这5页的数字,计算加和并提交结果 二、定位加密参数 通过get请求地址可以看到需要搞定参数有page、sign、t如下图: 进入堆栈不难发现这样一…

互联网加竞赛 基于机器视觉的12306验证码识别

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向…

驾驭车联网的力量:深入车联网网络架构

车联网&#xff0c;作为移动互联网之后的新风口&#xff0c;以网联思想重新定义汽车&#xff0c;将其从简单的出行工具演化为个人的第二空间。车联网涵盖智能座舱和自动驾驶两大方向&#xff0c;构建在网联基础上&#xff0c;犀思云多年深度赋能汽车行业&#xff0c;本文将从车…

极端恶劣天气数据集-

极端恶劣天气数据集是一个包含了各种极端天气事件的统计信息的数据集。这些事件包括暴雨、暴雪、台风、龙卷风等极端天气现象。该数据集提供了有关这些极端天气事件的时间、地点、持续时间、强度等详细信息。 这个数据集对于研究和分析极端天气现象的频率、趋势和影响具有重要…

基于K-Means聚类与RFM模型分析顾客消费情况【500010102】

项目说明 本数据集是生成式模拟数据&#xff0c;本项目通过可视化分析对数据进行初步探索&#xff0c;再通过时间序列针对店铺的销售额进行分析&#xff0c;对时序图进行分解&#xff0c;发现数据存在季节性&#xff0c;并且通过auto_arima自动选择参数建立了SARIMA模型&#…

【Leetcode 程序员面试金典 02.08】 —— 环路检测 |双指针

面试题02.08. 环路检测 给定一个链表&#xff0c;如果它是有环链表&#xff0c;实现一个算法返回环路的开头节点。若环不存在&#xff0c;请返回null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪next指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的…

【不用找素材】ECS 游戏Demo制作教程(1) 1.15

一、项目设置 版本&#xff1a;2022.2.0f1 &#xff08;版本太低的话会安装不了ECS插件&#xff09; 模板选择3D URP 进来后移除URP&#xff08;因为并不是真的需要&#xff0c;但也不是完全不需要&#xff09; Name: com.unity.entities.graphics Version: 1.0.0-exp.8 点击…

59.说一下 spring 的事务隔离?

spring 的事务隔离有什么作用? 用来解决并发事务所产生一些问题,并发会产生什么问题? 1.脏读2.不可重复度3.幻影读事务隔离的概念 通过设置隔离级别可解决在并发过程中产生的那些问题分别举例说明 1.脏读 上述图表示:一个事务,读取了另一个事务中没有提交的数据,会在…

AI对决:ChatGPT与文心一言的深度比较

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 引言ChatGPT与文心一言的比较Chatgpt的看法文心一言的看法Copilot的观点chatgpt4.0的回答 模型的自我评价自我评价 ChatGPT的优势在这里插入图片描述 文…

NXP-RT1176开发(一)——环境搭建(MCUXpressoIDE/VSCode)

目录 1. 安装IDE 1.1 官方开发的IDE软件 1.2 Config工具下载 1.3 说明&#xff08;需先有SDK&#xff09; 2. 下载SDK 3. VScode环境下编译 3.1 安装插件 3.2 确保本地有交叉编译工具链和CMAKE 3.3 加载本地SDK 3.4 导入例程编译 1. 安装IDE 该处理器编译规则可以MDK…

动手搓一个kubernetes管理平台(2)-后端权限设计

授权和认证 1. 权限分类 由于用户需要操作kubernetes&#xff0c;所以权限分类起码需要2套&#xff0c;即平台的权限和集群的权限管理&#xff0c;前者用于管理平台&#xff0c;如用户的添加&#xff0c;报表的查看&#xff0c;日志的审计等等&#xff0c;后者用于集群管理&a…

Vue3+ElementPlus实例_select选择器(不连续搜索)

1.开发需求 在各大UI框架的select选择器中&#xff0c;在搜索时都是输入连续的搜索内容&#xff0c;比如“app-store”选项&#xff0c;你要输入“app-xxx”&#xff0c;才能匹配这个选择&#xff0c;要是想输入“a-s”这种不连续的匹配方式&#xff0c;就实现不了&#xff0c…

【MATLAB】Linux版本 高分辨率屏 调整显示缩放

0 引言 安装了linux版本的MATLAB R2023b之后&#xff0c;发现工具栏字体很小不方便使用&#xff0c;所以上网找到了MATLAB论坛上某位大佬的教程&#xff1a;参考链接&#xff0c;放在这里供各位参考 。 1 环境 这里注明我的matlab安装环境仅供参考&#xff0c;未在其他环境下…

搭建知识付费小程序平台:如何避免被坑,选择最佳方案?

随着知识经济的兴起&#xff0c;知识付费已经成为一种趋势。越来越多的人开始将自己的知识和技能进行变现&#xff0c;而知识付费小程序平台则成为了一个重要的渠道。然而&#xff0c;市面上的知识付费小程序平台琳琅满目&#xff0c;其中不乏一些不良平台&#xff0c;让老实人…

【MATLAB随笔】遗传算法优化的BP神经网络(随笔,不是很详细)

文章目录 一、算法思想1.1 BP神经网络1.2 遗传算法1.3 遗传算法优化的BP神经网络 二、代码解读2.1 数据预处理2.2 GABP2.3 部分函数说明 一、算法思想 1.1 BP神经网络 BP神经网络&#xff08;Backpropagation Neural Network&#xff0c;反向传播神经网络&#xff09;是一种监…

多特征变量序列预测(五) CEEMDAN+CNN-LSTM风速预测模型

目录 ​编辑 往期精彩内容&#xff1a; 前言 1 多特征变量数据集制作与预处理 1.1 导入数据 1.2 CEEMDAN分解 1.3 数据集制作与预处理 2 基于Pytorch的CEEMDAN CNN-LSTM 预测模型 2.1 定义CEEMDAN CNN-LSTM预测模型 2.2 设置参数&#xff0c;训练模型 3 模型评估与…

Spring Aop原理

Aop概述 Spring 中 Aop的理解&#xff1a; AOP:将那些与业务无关&#xff0c;却与业务模块所共同调用的逻辑(例如事务处理&#xff0c;日志管理&#xff0c;权限管理等) 封装成一个可重用的模块&#xff0c;这个模块被称为"切面"&#xff0c;便于减少系统的重复代码…