• 学习笔记10-18


    (Hugecolor{Red}{10.18}) (Large{color{Blake}{主题:约数}})

    主要内容:

    .整除

    1. (a=b imes c),则称(a)(b)整除,或(b)整除(a),记作(amid b)

    2. (a=qb+r,(0le r< left| b ight|)),记(r=amod b)

    3. 整除的性质:

    • (a|b)(a|c),则(forall x,y),有(a|xb+yc)
    • (a|b)(b|c),则(a|c)
    • (m e0),则(a|b),当且仅当(ma|mb)
    • (a|b)(b|a),则(a=pm b)

    .约数

    1. 算数基本定理的推论

    对于正整数N......

    • N的正约数集合:

    [{{p_1^{b_1}p_2^{b_1}...p_m^{b_m}}} ]

    • N的正约数个数:

    [prodlimits_{i=1}^m(c_i+1) ]

    • N的所有正约数的和:

    [prodlimits_{i=1}^mleft(sumlimits_{j=0}^{c_i}(p_i^j) ight) ]

    1. 求N的正约数集合——试除法:
    • 扫描(d=1simsqrt{N})尝试是否(d|N),若能,则(d)(N/d)都是N的约数。复杂度:(O(sqrt{N}))
    1. 试除法的推论
    • 一个整数N的约数上限个数为(2 sqrt{N})
    1. (1sim{N})每个数的正约数集合——倍数法
    • (forall d,1 sim N)中以(d)为约数的数就是(d,2d,3d,...,leftlfloor{N/d} imes d ight floor)
    • 时间复杂度:(O(NlogN))

    Code:

    vector<int>factor[500010]
    for(int i=1;i<=n;i++)
      for(inr j=1;i*j<=n;j++)
    	factor[i*j].push_back(i);
    for(int i=1;i<=n;i++)
    {
    	for(int j=0;j<factor[i].size;k++)
      		printf("%d",factor[i][j]);
      	puts(" ");
    }
      
    
    1. 倍数法的推论:

    .最大公约数与最小公倍数

    性质:

    1. (a|m)(b|m),则(operatorname{lcm}(a,b)|m)
    2. (d|a)(b|m),则(d|gcd(a,b))
    3. (operatorname{lcm}(ma,mb)=m imesoperatorname{lcm}(a,b)).
    4. (mathcal{color{Red}{important}})

    [a imes b=gcd(a,b) imes operatorname{lcm}(a,b) ]

    可用此条性质求出(gcd(a,b))后用(a imes b/gcd(a,b))(operatorname{lcm}(a,b))

    .最大公约数的求法

    方法一:用唯一分解定理

    先分解质因数,然后求最大公约数。

    令:

    [a=p_1^a1 imes p_2^a2 imes... imes p_m^am ]

    [b=p_1^b1 imes p_2^b2 imes... imes p_m^bm ]

    [gcd(a,b)=p_1^{min(a1,b1)} imes p_2^{min(a2,b2)} imes... imes p_m^{min(am,bm)} ]

    方法二:九章算术·更相减损术

    (forall a,bin N,age b,)(gcd(a,b)=gcd(b,a-b)=gcd(a,a-b))

    (forall a,bin N,)(gcd(2a,2b)=2 imes gcd(a,b))

    方法三:欧几里得算法

    (mathcal{color{Red}{important}})

    [forall a,bin N,b e 0,gcd(a,b)=gcd(b,amod b) ]

    Code:

    int gcd(int a,int b)
    {
    	return (b==0)?a:gcd(b,a%b);
    }
    

    方法四:二进制算法

    (a=b,gcd(a,b)=a;)否则,分情况讨论

    1. (a)(b)均为偶数,(gcd(a,b)=2 imes gcd(a/2,b/2);)
    2. (a)为偶数,(b)为奇数(gcd(a,b)=gcd(a/2,b);)
    3. (b)为偶数,(a)为奇数(gcd(a,b)=gcd(a,b/2);)

    内心戏:

    没啥捷径。记好结论多推推公式才有正解。

    高精冲冲冲!

    这玩意儿太难写了。一百多行。以后再也不写了

  • 相关阅读:
    pandas 分组过滤
    bert fine tuning方法
    对字典进行排序
    1*1的卷积的作用
    使用Conv代替全连接层FC
    训练笔记
    javascript 正则分组捕捉
    谷歌浏览器 喔唷,崩溃啦
    sed awk
    c# 通过程序修改hosts文件
  • 原文地址:https://www.cnblogs.com/Sure042/p/note10-18.html
Copyright © 2020-2023  润新知