<蓝桥杯软件赛>零基础备赛20周--第16周--GCD和LCM

news2024/12/25 9:07:06

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集
20周的完整安排请点击:20周计划
每周发1个博客,共20周。
在QQ群上交流答疑:

在这里插入图片描述

文章目录

  • 1. GCD
    • 1.1 GCD概念
    • 1.2 GCD性质
    • 1.2 GCD编码实现
  • 2. LCM
  • 3. 例题
    • 3.1 等差数列
    • 3.2 Hankson的趣味题
    • 3.3 最大比例

第16周:GCD和LCM
  最大公约数(GCD)和最小公倍数(Least Common Multiple,LCM)研究整除的性质,非常古老,2000多年前就得到了很好的研究。由于简单易懂,有较广泛的应用,是竞赛中频繁出现的考点。
最大公约数有多种英文表述:Greatest Common Divisor(GCD)、Greatest Common Denominator、Greatest Common Factor(GCF)、Highest Common Factor (HCF)。

1. GCD

1.1 GCD概念

   整数a和b的最大公约数是能同时整除a和b的最大整数,记为gcd(a, b)。
  负整数也可以算gcd,不过由于-a的因子和a的因子相同,编码时只需要关注正整数的最大公约数。下面用c++函数std::__gcd(a, b)演示gcd的计算结果。

#include<bits/stdc++.h>
using namespace std;
int main(){
    cout << __gcd(45,9)   <<"\n";   // 9
    cout << __gcd(0,42)   <<"\n";   // 42
    cout << __gcd(42,0)   <<"\n";   // 42
    cout << __gcd(0,0)    <<"\n";   // 0
    cout << __gcd(20,15)  <<"\n";   // 5
    cout << __gcd(-20,15) <<"\n";   // -5
    cout << __gcd(20,-15) <<"\n";   // 5
    cout << __gcd(-20,-15)<<"\n";   // -5
    cout << __gcd((long long)98938441343232,(long long)33422)<<"\n"; //2
}

  Java没有自带GCD库函数。
  Python自带的GCD函数,只返回正整数。

from  math import *
print(gcd(45, 9))                # 9
print(gcd(0, 42))                # 42
print(gcd(42, 0))                # 42
print(gcd(0, 0))                 # 0
print(gcd(20, 15))               # 5
print(gcd(-20, 15))              # 5
print(gcd(20, -15))              # 5
print(gcd(-20, -15))             # 5
print(gcd(98938441343232, 33422)) # 2

1.2 GCD性质

  GCD有关的题目一般会考核GCD的性质。
  (1)gcd(a, b) = gcd(a, a+b) = gcd(a, k·a+b)
  (2)gcd(ka, kb) = k·gcd(a, b)
  (3)多个整数的最大公约数:gcd(a, b, c) = gcd(gcd(a, b), c)。
  (4)若gcd(a, b) = d,则gcd(a/d, b/d) = 1,即a/d与b/d互素。这个定理很重要。
  (5)gcd(a+cb, b) = gcd(a, b)

1.2 GCD编码实现

   编程时可以不用自己写GCD代码,而是直接使用c++函数std::__gcd(a, b)。如果自己编码也很简单,用欧几里得算法,又称为辗转相除法,即gcd(a, b) = gcd(b, a mod b)。

int gcd(int a, int b){        // 一般要求a>=0, b>0。若a=b=0,代码也正确,返回0
	return b? gcd(b, a%b):a;
}

  Java的gcd需要自己写。

import java.math.BigInteger;
public class Main {
    public static void main(String[] args) {
        System.out.println(gcd(45, 9));                // 9
        System.out.println(gcd(0, 42));                // 42
        System.out.println(gcd(42, 0));                // 42
        System.out.println(gcd(0, 0));                 // 0
        System.out.println(gcd(20, 15));               // 5
        System.out.println(gcd(-20, 15));              // -5
        System.out.println(gcd(20, -15));              // 5
        System.out.println(gcd(-20, -15));             // -5
        System.out.println(gcd(new BigInteger("98938441343232"), new BigInteger("33422"))); // 2
    }
    public static long gcd(long a, long b) {
        if (b == 0)   return a;        
        return gcd(b, a % b);
    }
    public static BigInteger gcd(BigInteger a, BigInteger b) {
        return a.gcd(b);
    }
}

  python。自己写gcd()函数,可能返回负数。

def gcd(a,b):
    if b ==0:return a
    else: return gcd(b,a%b)
print(gcd(45, 9))                # 9
print(gcd(0, 42))                # 42
print(gcd(42, 0))                # 42
print(gcd(0, 0))                 # 0
print(gcd(20, 15))               # 5
print(gcd(-20, 15))              # 5
print(gcd(20, -15))              # -5
print(gcd(-20, -15))             # -5
print(gcd(98938441343232, 33422)) # 2

2. LCM

   最小公倍数LCM(the Least Common Multiple)。a和b的最小公倍数lcm(a, b),从算术基本定理推理得到。
  算术基本定理:任何大于1的正整数n都可以唯一分解为有限个素数的乘积: n = p 1 c 1 p 2 c 2 . . . p m c m n = p_1^{c1}p_2^{c2}...p_m^{cm} n=p1c1p2c2...pmcm,其中ci都是正整数, p i p_i pi都是素数且从小到大。
  设: a = p 1 c 1 p 2 c 2 . . . p m c m , b = p 1 f 1 p 2 f 2 . . . p m f m a = p_1^{c1}p_2^{c2}...p_m^{cm},b = p_1^{f1}p_2^{f2}...p_m^{fm} a=p1c1p2c2...pmcmb=p1f1p2f2...pmfm
  那么:
     g c d ( a , b ) = p 1 m i n { c 1 , f 1 } p 2 m i n { c 2 , f 2 } . . . p m m i n { c m , f m } gcd(a, b) = p_1^{min\{c1,f1\}}p_2^{min\{c2,f2\}}...p_m^{min\{cm,fm\}} gcd(a,b)=p1min{c1,f1}p2min{c2,f2}...pmmin{cm,fm}
     l c m ( a , b ) = p 1 m a x { c 1 , f 1 } p 2 m a x { c 2 , f 2 } . . . p m m a x { c m , f m } lcm(a, b) = p_1^{max\{c1,f1\}}p_2^{max\{c2,f2\}}...p_m^{max\{cm,fm\}} lcm(a,b)=p1max{c1,f1}p2max{c2,f2}...pmmax{cm,fm}
  可以推出:
     g c d ( a , b ) ∗ l c m ( a , b ) = a ∗ b gcd(a, b)*lcm(a, b) = a*b gcd(a,b)lcm(a,b)=ab
  即
     l c m ( a , b ) = a ∗ b / g c d ( a , b ) = a / g c d ( a , b ) ∗ b lcm(a, b) = a*b/gcd(a, b) = a/gcd(a, b)*b lcm(a,b)=ab/gcd(a,b)=a/gcd(a,b)b

c++代码

int lcm(int a, int b){          //需要的时候把int改成long long
	return a / gcd(a, b) * b;  //先做除法再做乘法,防止先做乘法溢出
}

java代码

    public static int gcd(int a, int b) {
        if (b == 0)        return a;        
        return gcd(b, a % b);
    }
    public static long lcm(int a, int b) {
        return (long) a / gcd(a, b) * b;
    }

python代码
  在Python新版本中有库函数lcm(),它可以带多个参数。

from  math import *
print(lcm(3,6,8,9))  #输出72

  也可以自己写一个:

from  math import *
def lcm(x,y):   return x//gcd(x,y)*y

3. 例题

  GCD和LCM的题目太多了,随便到哪个OJ都能以GCD为算法关键词搜出很多。

3.1 等差数列


等差数列
【题目描述】数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一部分的数列,只记得其中N个整数。现在给出这N个整数,小明想知道包含这N个整数的最短的等差数列有几项?
【输入描述】输入的第一行包含一个整数N。 第二行包含N个整数A1,A2,···,AN。(注意A1 ∼AN并不一定是按等差数列中的顺序给出) (对于所有评测用例,2≤N≤100000,0≤Ai≤ 1 0 9 10^9 109。)
【输出描述】输出一个整数表示答案


  所有数字间距离最小的间隔是公差吗? 并不是,例如{2,5,7},最小的间隔是2,但公差不是2,是1。
  这是gcd问题。把n个数据排序,计算它们的间隔,对所有间隔做GCD,结果为公差。最少数量等于:(最大值-最小值)/公差+1。
c++代码

#include<bits/stdc++.h>
using namespace std;
int a[100000];
int main(){
    int n;   cin>>n;
    for(int i=0;i<n;i++)   cin>>a[i];
    sort(a,a+n);
    int d=0;
    for(int i=1;i<n;i++)   d = __gcd(d,a[i]-a[i-1]);     
    if(d==0) cout<<n<<endl;
    else     printf("%d\n",(a[n - 1] - a[0]) / d + 1);
    return 0;
}

Java代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] a = new int[n];
        for (int i = 0; i < n; i++)  a[i] = sc.nextInt(); 
        Arrays.sort(a);
        int d = 0;
        for (int i = 1; i < n; i++)  d = gcd(d, a[i] - a[i - 1]);        
        if (d == 0)    System.out.println(n);
        else     System.out.println((a[n - 1] - a[0]) / d + 1);        
    }

    public static int gcd(int a, int b) {
        if (b == 0)  return a;        
        return gcd(b, a % b);
    }
}

python代码

from  math import *
n=int(input())
a=list(map(int,input().split()))
a.sort()
d=0
for i in range(1,n):  d=gcd(d,a[i]-a[i-1])
if d==0:  print(n)
else:     print((a[-1]-a[0])//d+1)

3.2 Hankson的趣味题


Hankson的趣味题
【题目描述】刚刚放学回家的Hankson正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数c1和c2的最大公约数和最小公倍数。现在Hankson认为自己已经熟练地掌握了这些知识,他开始思考一个“求公约数”和“求公倍数”之类问题的“逆问题”,这个问题是这样的:已知正整数a0,a1,b0,b1,设某未知正整数x满足:

  1. x和a0 的最大公约数是a1;
  2. x和b0的最小公倍数是b1。
    Hankson的“逆问题”就是求出满足条件的正整数x。但稍加思索之后,他发现这样的x并不唯一,甚至可能不存在。因此他转而开始考虑如何求解满足条件的x的个数。请你帮助他编程求解这个问题。
    【输入格式】输入第一行为一个正整数n,表示有n组输入数据。 接下来的n行每行一组输入数据,为四个正整数a0,a1,b0,b1,每两个整数之间用一个空格隔开。输入数据保证a0能被a1整除,b1能被b0整除。
    数据规模:对于100%的数据,保证有1≤a0,a1,b0,b1≤2,000,000,000且n≤2000。
    【输出格式】输出共n行。每组输入数据的输出结果占一行,为一个整数。对于每组数据:若不存在这样的x,请输出0;若存在这样的x,请输出满足条件的x的个数。

  最简单的暴力法,是把所有可能的x试一遍。x的范围是x ≤ b1。
  但是,由于本题的数据范围是 b 1 ≤ 2 × 1 0 9 b1 ≤ 2×10^9 b12×109,肯定超时。
  若x是b1的因子,那么x*y = b1,y也可能是答案。所以只需要在范围x<=sqrt(b1)内查询,同时判断y就行了。
  但是这样还是超时,因为gcd计算也要花时间,最后加上一个优化:if(b1%x==0),表示b1是x的公倍数。

c++代码

#include<bits/stdc++.h>
using namespace std;
int lcm(int a, int b){ return a / __gcd(a, b) * b;}
int main() {
    int n; scanf("%d",&n);
    while(n--) {
        int a0,a1,b0,b1;
        cin >>a0>>a1>>b0>>b1;
        int ans=0;
        for(int x=1;x <= sqrt(b1);x++){
            if(b1%x == 0){        //优化
                if(__gcd(x,a0)==a1 && lcm(x,b0)==b1)  ans++;
                int y = b1/x;       //另外一个因子
                if(x==y) continue;
                if(__gcd(y,a0)==a1 && lcm(y,b0)==b1)  ans++;
            }
        }
        cout << ans <<endl;
    }
    return 0;
}

java

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        while (n-- > 0) {
            int a0 = sc.nextInt();
            int a1 = sc.nextInt();
            int b0 = sc.nextInt();
            int b1 = sc.nextInt();
            int ans = 0;
            for (int x = 1; x <= Math.sqrt(b1); x++) {
                if (b1 % x == 0) {
                    if (gcd(x, a0) == a1 && lcm(x, b0) == b1)   ans++;                    
                    int y = b1 / x;
                    if (x == y) continue;                    
                    if (gcd(y, a0) == a1 && lcm(y, b0) == b1)    ans++;                    
                }
            }
            System.out.println(ans);
        }
    }
    public static int gcd(int a, int b) {
        if (b == 0) return a;        
        return gcd(b, a % b);
    }

    public static int lcm(int a, int b) {
        return a / gcd(a, b) * b;
    }
}

python

from  math import *
def lcm(x,y):  return x//gcd(x,y)*y
n=int(input())
for _ in range(n):
    a0,a1,b0,b1 = map(int,input().split())
    ans=0
    for x in range(1,int(sqrt(b1))+1):
        if b1 % x == 0:
            if gcd(x,a0)==a1 and lcm(x,b0)==b1: ans+=1
            y = b1//x
            if x==y: continue
            if gcd(y,a0)==a1 and lcm(y,b0)==b1: ans+=1
    print(ans)

3.3 最大比例


最大比例
【题目描述】X星球的某个大奖赛设了M级奖励。每个级别的奖金是一个正整数。并且,相邻的两个级别间的比例是个固定值。也就是说:所有级别的奖金数构成了一个等比数列。比如:16,24,36,54
其等比值为:3/2
现在,我们随机调查了一些获奖者的奖金数。请你据此推算可能的最大的等比值。
【输入格式】第一行为数字 N (0<N<100),表示接下的一行包含N个正整数。第二行N个正整数Xi(Xi<1 000 000 000 000),用空格分开。每个整数表示调查到的某人的奖金数额。
【输出格式】一个形如A/B的分数,要求A、B互质。表示可能的最大比例系数。
测试数据保证了输入格式正确,并且最大比例是存在的。


  先试试暴力法。
  把这些数字排个序,然后算出相邻两个数的比值。最小的那个比值K是否就是答案呢?
  不是。例如{2, 16, 64},比值是16/2=8,64/16=4,最小比值K=4。但是原序列是{2, 4, 8, 16, 32, 64},比值是2。
  所以答案肯定比K小,如何求出答案?如果一个个试比K小的分数,肯定会超时。
  再用另一个思路,这次不是算相邻两个数的比值,而是每个数对第一个数的比值,会不会好些?
  设原序列是 x , x q 1 , x q 2 , . . . , x q n − 1 {x, xq^1, xq^2, ..., xq^{n-1}} x,xq1,xq2,...,xqn1,从中挑出一些数字 x q c , x q d , . . . , x q y , x q z {xq^c, xq^d, ..., xq^y, xq^z} xqc,xqd,...,xqy,xqz,它们之间的两两相除,得到一个比值序列 1 , q d − c , . . . , q z − y {1, q^{d-c}, ... , q^{z-y}} 1,qdc,...,qzy,这其中的一些数字可能是相同的,有点麻烦。
  或者算它们对第一个数的比值,得 1 , q d − c , . . . , q y − c , q z − c = 1 , q k d , . . . , q k y , q k z {1, q^{d-c}, ... , q^{y-c} , q^{z-c}} ={1, q^{kd}, ... , q^{ky} , q^{kz}} 1,qdc,...,qyc,qzc=1,qkd,...,qky,qkz ,这个序列内的所有数字肯定不同。令 q = a / b q = a/b q=a/b,那么这个序列变成了 1 , ( a / b ) k d , . . . , ( a / b ) k y , ( a / b ) k z {1, (a/b)^{kd}, ..., (a/b)^{ky}, (a/b)^{kz}} 1,(a/b)kd,...,(a/b)ky,(a/b)kz。分成分子和分母两个序列,分别是 A = a k d , . . . , a k y , a k z , B = b k d , . . . , b k y , b k z A={a^{kd}, ..., a^{ky}, a^{kz}}, B={b^{kd}, ..., b^{ky}, b^{kz}} A=akd,...,aky,akz,B=bkd,...,bky,bkz
  已知这两个序列A、B中每个元素的值,求a和b。
  例如A={16, 128, 512, 1024},得a=2,即 A = 2 4 , 2 7 , 2 9 , 2 10 A={2^4, 2^7, 2^9, 2^{10}} A=24,27,29,210。如何根据A求a?
  显然,A中每个数除以前面一个数,都能够整除,得到a的一个倍数,但是这个倍数还不是a,需要继续除,直到得到a为止。以前2个数 2 4 , 2 7 {2^4, 2^7} 24,27为例,计算步骤是: 2 7 / 2 4 = 2 3 , 2 4 / 2 3 = 2 1 , 2 3 / 2 1 = 2 2 , 2 2 / 2 1 = 2 , 2 1 / 2 1 = 1 2^7/2^4=2^3,2^4/2^3=2^1,2^3/2^1=2^2,2^2/2^1=2,2^1/2^1=1 27/24=2324/23=2123/21=2222/21=221/21=1,结束,得a=2。这是一个辗转相除的过程。
  对A中所有元素都执行这个过程,就得到了a。下面代码中的gcd_sub()完成了这一任务。

c++代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 105;
ll x[N],a[N],b[N];
ll gcd_sub(ll a,ll b){
    if(a<b)   swap(a,b);
    if(b==1)  return a;
    return gcd_sub(b,a/b);
}
int main(){
    int n; cin >>n;
    ll cnt=0;
    for(int i=0;i<n;i++)  cin>>x[i];
    sort(x,x+n);         //排序
    for(int i=1;i<n;i++){
        ll d = __gcd(x[i],x[0]);
        a[cnt] = x[i]/d;
        b[cnt] = x[0]/d;   //约分,得分子a / 分母b
        cnt++;
    }
    ll up = a[0], down = b[0];
    for(int i=1;i<cnt;i++){
        up= gcd_sub(up,a[i]);        //求分子
        down = gcd_sub(down,b[i]);   //求分母
    }
    cout<<up<<'/'<<down<<endl;
    return 0;
}

java

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] x = new long[n];
        for (int i = 0; i < n; i++)   x[i] = sc.nextLong();        
        Arrays.sort(x);
        long[] a = new long[n - 1];
        long[] b = new long[n - 1];
        int cnt = 0;
        for (int i = 1; i < n; i++) {
            long d = gcd(x[i], x[0]);
            a[cnt] = x[i] / d;
            b[cnt] = x[0] / d;
            cnt++;
        }
        long up = a[0];
        long down = b[0];
        for (int i = 1; i < cnt; i++) {
            up = gcdSub(up, a[i]);
            down = gcdSub(down, b[i]);
        }
        System.out.println(up + "/" + down);
    }

    public static long gcd(long a, long b) {
        if (b == 0) return a;        
        return gcd(b, a % b);
    }

    public static long gcdSub(long a, long b) {
        if (a < b) {long temp = a; a = b; b = temp; }
        if(b==1) return a;
        return gcdSub(b,a/b);
    }
}

python

from math import *
def gcd_sub(a,b):
    if a<b: a,b = b,a
    if b==1: return a
    return gcd_sub(b,a//b);
n = int(input())
x = list(set(map(int,input().split())))  #set有去重的作用
x.sort()
n = len(x)
a=[]
b=[]
for i in range(1,n):
    d = gcd(x[i],x[0])
    a.append(x[i]//d)
    b.append(x[0]//d)
n = len(a)
up = a[0]
down = b[0]
for i in range(1,n):
    up = gcd_sub(up,a[i])
    down = gcd_sub(down,b[i])
print('%d/%d'%(up,down))

  其他练习,请到这里:洛谷的GCD题目

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

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

相关文章

dolphinscheduler节点二次开发需要改动的部分

dolphinscheduler节点二次开发需要改动的部分 前端 在dolphinscheduler-ui/public/images/task-icons/目录下新增两个节点的logo图片&#xff0c;一个为激活状态的一个为非激活状态的&#xff0c;如下。 修改文件dolphinscheduler-ui/src/views/projects/task/constants/task…

git bash右键菜单失效解决方法

git bash右键菜单失效解决方法 这几天重新更新了git&#xff0c;直接安装新版本后&#xff0c;右键菜单失效找不到了。找了好几个博客&#xff0c;发现都不全面&#xff0c;最后总结一下解决方法&#xff1a; &#xff08;1&#xff09;按winr&#xff0c;输入regedit打开注册…

【学网攻】 第(3)节 -- 交换机配置聚合端口

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了世界各地的人们&#xff0c;让信息和资源得以自由流动。随着互联网的发展&#xff0c;我们可以通过网络学习、工作、娱乐…

idea创建公用依赖包项目

创建parent项目 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/…

C++读取txt文件中的逐个字符

为了增加读取的灵活性&#xff0c;所以separator和filename都设置为在主函数中获取输入或者在函数中传参的视线方法 举个例子&#xff0c;txt文件如下&#xff1a; household;2;true; 首先声明一个读取数据的文件 void read_data_file(const string& filename,char se…

使用Fiddler进行弱网测试

测试APP、web经常需要用到弱网测试&#xff0c;也就是在信号差、网络慢的情况下进行测试。我们自己平常在使用手机APP时&#xff0c;在地铁、电梯、车库等场景经常会遇到会话中断、超时等情况&#xff0c;这种就属于弱网。 普通的弱网测试可以选择第三方工具对带宽、丢包、延时…

代码随想录算法训练营第29天(回溯算法05 | * 491.递增子序列 * 46.全排列 * 47.全排列 II

回溯算法part05 491.递增子序列解题思路与 90.子集II 不同的点回溯三部曲 46.全排列解题思路遇到的难点思考 47.全排列 II解题思路注意点拓展需要加深理解的点&#xff08;需复习 小总结 491.递增子序列 本题和大家刚做过的90.子集II非常像&#xff0c;但又很不一样&#xff0c…

简单实现网络编程

1. 前置知识 在学习网络编程前&#xff0c;我们需要先了解一些前置知识 1.1 客户端和服务器 在网络编程中&#xff0c;客户端和服务器是两个关键的角色。 客户端是发起连接并向服务器发送请求的一方。客户端通常是一个应用程序或设备&#xff0c;通过与服务器建立连接&…

线性表--链表--带头双向循环链表

目录 1.什么是带头双向循环链表&#xff1f; 2.实现增删查改功能&#xff1a; 2.1使用链表前必须对头节点初始化 2.2尾插 2.3尾删 2.4头插 2.5头删 2.8查找 2.7指定位置插入 2.8指定位置删除 2.9改变数据 ​编辑 2.10打印 2.11销毁 3.代码 1.什么是带头双向循环链表&…

docker 基础手册

文章目录 docker 基础手册docker 容器技术镜像与容器容器与虚拟机docker 引擎docker 架构docker 底层技术docker 二进制安装docker 镜像加速docker 相关链接docker 生态 docker 基础手册 docker 容器技术 开源的容器项目&#xff0c;使用 Go 语言开发原意“码头工人”&#x…

【C++练级之路】【Lv.7】【STL】vector类的模拟实现

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、成员变量二、默认成员函数2.1 constructor2.2 destructor2.3 copy constructor2.4 operator 三、迭代器…

Vue3+TS+dhtmlx-gantt实现甘特图

实现样式 因为只做展示&#xff0c;所以实现很简单 实现功能 自定义列头增加斑马线&#xff0c;实际结束时间&#xff08;自定义实现&#xff09;自定义进度展示&#xff0c;根据层级让进度背景颜色变浅marker标记今天自定义提示框内容 实现 import { gantt } from "d…

某顺cookie逆向

目标网站:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 这个网站是对cookie进行反爬虫的&#xff0c;可以看到cookie中有一个加密参数v 二、分析参数 可以使用hook方法&#xff0c;来hook住cookie中v生成的位置&#xff0c;可以直接在控制台中输入hook函数 (function () {use strict;v…

【详细解释深度学习图像分类检测评价指标】准确率Accuracy、精确率Precision、召回率Recall、mAP等(一文搞懂,建议收藏)

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要是记录工作中、学习中关于AI(Deep Learning)相关知识并分享。 &#x1f60a;&#x1f60a;&#x1f…

Parallels Desktop 19 mac 虚拟机软件 兼容M1 M2

Parallels Desktop 19 for Mac 是一款适用于 macOS 的虚拟机软件。无需重启即可在 Mac 上运行 Windows、Linux 等系统&#xff0c;具有速度快、操作简单且功能强大的优点。包括 30 余种实用工具&#xff0c;可简化 Mac 和 Windows 上的日常任务。 软件下载&#xff1a;Parallel…

大模型时代的计算机系统革新:更大规模、更分布式、更智能化

编者按&#xff1a;2023年是微软亚洲研究院建院25周年。借此机会&#xff0c;我们特别策划了“智启未来”系列文章&#xff0c;邀请到微软亚洲研究院不同研究领域的领军人物&#xff0c;以署名文章的形式分享他们对人工智能、计算机及其交叉学科领域的观点洞察及前沿展望。希望…

搭建网站使用花生壳的内网穿透实现公网访问

目录 一 搭建网站 二 使用花生壳进行内网穿透 1、创建内网映射 2、linux系统安装花生壳客户端 3、重新打开浏览器&#xff0c;输入http://b.oray.com&#xff0c;完成账户登录&#xff0c;激活&#xff08;SN登录&#xff09; 一 搭建网站 准备工作&#xff1a; [rootse…

主播产品对比话术

—、价格对比 主播产品A︰这款产品定价相对较高&#xff0c;但是其品质和功能都是一流的&#xff0c;对于追求高端体验的消费者来说&#xff0c;物有所值。 主播产品B∶这款产品的价格相对较低&#xff0c;性价比很高&#xff0c;对于预算有限的消费者来说&#xff0c;是个不…

基于Java SSM框架现图书馆借阅管理系统项目【项目源码+论文说明】

基于java的SSM框架实现图书馆借阅管理系统演示 摘要 以往的图书馆管理事务处理主要使用的是传统的人工管理方式&#xff0c;这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点&#xff0c;长期的人工管理模式会产生大量的文本借书与文本数据&#xff0c;这对事务的…

控制项目风险

一、风险预算 暴雪公司经理艾莉森&#xff0c;暴雪公司是一家小型工业企业&#xff0c;该公司的高管为了降低生产成本&#xff0c;决定搬迁工厂。项目经理明白实际情况与初始计划之间常常会有很大的出入。项目经理需要事先为一些事情做好准备&#xff0c;并在项目运作或预算方面…