• 数论小总结


    质(素)数 : 任何数都能表示为质数的乘积,这应该是由质数的概念决定的,因为质数指:“质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。” ,所以合数肯定等于质数*某数,而某数又可以用这样的规则拆分成质数的乘积!

    另外有这样一个定理如果a,x与n互质,则a*x与n互质!!!   因为a,x,n拆分成质数后,a,x与n拆分出来的质数是不同的,并且质数*质数并不会产生另外的质数,所以res=a*x的质数组成和n的质数组成是完全不同的,所以a*x与n互质~~~

    乘法可取模证明:求a*b%m 设a=k1m+c1,b=k2m+c2  a*b=(k1m+c1)*(k2m+c2)=(k1k2+k1c2+k2c1)*m+c1c2=a%mod*(b%mod)

    逆元:就把求 a (*1) /b%mod 时把1换成b^(φ(mod))==1 ,这样就能把分母约掉,然后化成乘法就可以先模后乘了!

    求解逆元有三种方法     参考网址

    费马小定理和欧拉定理的证明

    扩展欧几里德证明

    线性时间内求范围内所有整数的逆元

    当m不是很大的时候(数组能够存起来的时候)可以线性时间求逆元。规定m为质数,
    首先 1^(−1) ≡ 1(mod m)
    然后我们设 m = k*x + r, r < x, 1 < x < p;
    再将这个式子放到mod m意义下就会得到
    k*x + r ≡ 0 (mod m)
    两边同时乘上 x^(−1) * r^(−1)就会得到
    k * r^(−1) + x^(−1) ≡ 0 (mod m)
    x^(−1) ≡ −k * r^(−1) (mod m)
    x^(−1) ≡ -(m/x) * (m%x)^(−1) (mod m)
    从头开始扫一遍即可,时间复杂度O(n);

    int inv[maxn];
    inv[1] = 1;
    for(int i = 2; i < maxn; ++i)
        inv[i] = (-p/i + p) * inv[p%i] % p;

    欧拉降幂证明

  • 相关阅读:
    .net面试题目问答题2
    .net面试题目问答题1
    .net面试题目101-130
    .net面试题目51-100
    .net面试题目1-50
    试题
    2014奇虎360研发类校园招聘面试题分享
    JAVA基础
    JAVA中集合的继承关系
    美团
  • 原文地址:https://www.cnblogs.com/WindFreedom/p/9508938.html
Copyright © 2020-2023  润新知