Day 2 下 数论部分(undone)

素数判定

一般从2判到sqrt(n)就够用了 还有一个miller-rabin

题目 NOIP2012 质因数分解

素数筛法

O(n log log n)
筛到素数后标记其倍数,因为会重复所以是O(n log log n)
线性筛
``` for(int i=2;i<=n;++i) { if(!vis[i])pr[++num]=i; for(int j=1;j<=num&&pr[j]*i<=n;++j)//后一个判定条件是为了防止超出去 { vis[pr[j]*i]=1; if(!(i%pr[j]))//这里的判定使得算法复杂度为O(n)而非O(n log n) break; } } ``` 这里就只解释一下最关键的语句是怎么起作用的吧。 他保证了一个合数只会被它最小的质因子筛到,比如$2^5*3^3*5^7$ 它只会被2在乘以$2^4*3^3*5^7$时筛掉 很灵性的一个东西。。。真的挺难想出来的。。。 这个东西还是好好背代码吧

gcd-欧几里得

int gcd(int x,int y)
{
 return x%y?gcd(y,x%y):x;
}

只给出它是O(log n)的证明
我们可以证明:a%b<a/2
分以下两种情况:
①b<=a/2
那么显然a%b<a/2
②b>a/2
那么a%b=a-b,显然小于a/2
所以他的复杂度是 O ( l o g 2 n ) O(log_2n) O(log2n)

扩展欧几里得

这个算法是用来解$ax+by=gcd(a,b)$这样的方程(当且仅当右边为gcd(a,b)时,x,y有整数解) 由于gcd(a,b)=gcd(b,a%b) [欧几里得算法的结论] 那我们可以弄下去 假设存在x$_2$,y$_2$ 使得bx$_2$+(a%b)y$_2$=gcd(b,a%b)=gcd(a,b) 由于a%b=a-floor(a/b) 将其代入,拆式子,合并同类项,得 ay$_2$+b(x$_2$-floor(a/b)*y$_2$)=gcd(a,b) 即x=y$_2$,y=x$_2$-floor(a/b)*y$_2$,这为我们后面从底部反推回来做好了铺垫 递归到底,一定会有 gcd(a,b)x$_n$+0*y$_n$=gcd(a,b) 此时显然x$_n$=1,y$_n$=0是它的一组解 然后我们按照上面推的式子推回去,就得到了这个不定方程的一组解 这个代码return 的是gcd(a,b)。。。 ``` int exgcd(int a,int b,int &x,int &y) { if(!b) { x=1; y=0; return a; } int ans=exgcd(b,a%b,x,y); int temp=x; x=y;//划重点 y=temp-a/b*y;//划重点 return ans; } ``` 例题:同余方程 PS:解有可能是负数

LCM

lcm(a,b)=a*b/gcd(a,b) 建议先除以,防止溢出

快速幂

这也算数论内容???难道不是倍增??? 建议:用while()而不要用递归,不然常数会比较大

逆元

ps:逆元也有可能是负数 逆元的定义:若x*y$\equiv$1(mod p),那么y为x的逆元 **只有x与p互质时,x才存在逆元** 逆元满足交换、结合、分配律 求逆元的方法:
①exgcd
ax$\equiv$1(mod p) $\Leftrightarrow $ ax-p*floor(a/p)=1$\Leftrightarrow $ax+py=1 用exgcd解这个不定方程即可
②费马小定理
条件:**p是质数且a,p互质** 结论:若p是质数,且a,p互质,那么a$^{p-1}$$\equiv$1(mod p) 显然,a*a$^{p-2}$$\equiv$1(mod p) 用快速幂求解即可
引入.欧拉函数
定义ψ(n)为[1,n]中与n互质的数的个数(1也算) 如ψ(4)=2,ψ(6)=2 记k的质因数分解形式为k=p$_1$$^{t1}$*p$_2$$^{t2}$…p$_n$$^{tn}$ 那么ψ(k)=k*(1-1/p$_1$)*(1-1/p$_2$)*…(1-1/p$_n$) 这个式子可以用容斥原理证明,其实是先找出k中含有质因数pi的个数之类的... 而且ψ(n)是个积性函数 神奇的是这个函数还可以用欧拉筛来求 讨论两种情况 ①ψ(2$^3$3$^3$5$^1$)=ψ(2$^2$3$^3$5$^1$)*2 //因为后面的那些分数已经没差了,差的只是前面的k,所以才能这样求,把求的式子写开就能看出来 ②ψ(2$^1$3$^3$5$^1$)=ψ(3$^3$5$^1$)*ψ(2$^1$) //因为这时差的不只有k,还有分数那里也差一个,这也说明了ψ(n)是一个不完全积性函数
③欧拉公式
介绍完了欧拉函数ψ(n),我们就可以来用欧拉公式了 其实费马小定理也只是欧拉公式的一个特殊情况! 条件:a,p互质,即gcd(a,p)=1 (也就是逆元存在的条件) 公式如下: a$^{ψ(p)}$%p=1 可以看出来,费马小定理的条件下ψ(p)=p-1,所以可以那样来弄 由欧拉公式就得出了%p意义下a的逆元为a$^{ψ(p)-1}$

组合数

同余方程组

问题:模线性同余方程组 x$\equiv$$a_1$(mod $n_1$) x$\equiv$$a_2$(mod $n_2$) · · · x$\equiv$$a_k$(mod $n_k$) 给定$a_1$,$a_2$,...,$a_k$,$n_1$,$n_2$,...,$n_k$ 求$x$
中国剩余定理
当$n_1$,$n_2$,...,$n_k$两两互素时,可用中国剩余定理求解 该模线性方程组有整数解 定义$M=n_1 * n_2 *…*n_k$ $M_i=M/n_i$ 显然$M_i$在%除$n_i$外的$n$时均为零 就容易构造出单个方程的解为$a_it_iM_i$($t_i$为$M_i$在%$n_i$意义下的逆元) 然后所有解相加,再%$M$就得到了最小自然数解,$+kM(k=0,1,2,...)$就是通解
ex-gcd解同余方程组

题目:Hankson的趣味题

高斯消元

容斥原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值