数论知识点:

约数个数和约数和公式(例题:POJ1845 分治思想):

质因数分解 p1^k1xp2^k2xp3^k3...pn^kn

约数个数和(1+k1)(1+k2)...(1+kn)

所有约数和=(1+p1+p1^2+...+p1^k1)...(1+pn+pn^2+...+pn^kn)

求和方法:因式分解+分治

            或者等比数列求和+拓展GCD求逆元

欧拉定理:若GCD(x,y)≡1,则x^(φ(y))≡1(mode y)

      特殊:费马小定理:若y是质数,且x,y互质,则x^(y-1)≡1 (mode y)

推论:降幂公式:若GCD(x,y)≡1,则a^x≡a^(x%φ(y))(mode y)

            若GCD(x,y)≠ 1,则a^x≡a^(x%φ(y)+φ(y))(mode y)

欧拉函数φ(x),其中若x为质数,则φ(x)=x-1,且欧拉函数为积性函数(人话:可以线性筛!!!

gcd与lcmGCD(x,y)xLCM(x,y)=xy

拓展GCDax≡y (mod p)

刚刚写计算器,发现我对拓展gcd的理解出现了漏洞......

(我发现我忽略了使用拓展gcd的第一步,上来就递归......)

使用拓展gcd步骤如下:

                给定不定方程ax≡y(mode p)
首先求gcd(a,p)=t ①
若y mode t !=0,则原方程无整数解
若y mode t = 0,则:
a/=t,y/=t,p/=t ②
即将原方程化为a0x+p0z=y0的形式
接下来求出a0x+p0z=1 ③的一组整数解x0,z0
此时才用到拓展gcd
其解法:辗转相除至b=0,此时赋值x=1,y=0,回溯时修改x=y0,y=x0-(a/b)y0
然后再算出x=y0*x0+kp0(k∈Z)
z=y0*z0+kp0(k∈Z) ④
最后化出正整数(取模加模再取模)即可 ⑤
所以拓展gcd是至少有5步的!
(然而我只记得辗转相除再赋值...所以计算器WA了一下午...)

求逆元:拓展GCD,费马-欧拉定理,线性筛

中国剩余定理:已知

            x%a0≡a1,x%b0≡b1,x%c0≡c1

            令M1=b0xc0,M2=a0xc0,M3=a0xb0

            则原方程可变为:

            M1x1≡1(mode a0)

            M2x2≡1(mode b0)

            M3x3≡1(mode c0)

            显然可用拓展gcd解出x1,x2,x3

            那么,所求x=(M1a1x1+M2a2x2+M3a3x3)%(LCM(a0,b0,c0))

结论:中国剩余定理给出了一系列模方程组,可以采用拓展GCD将上述方程拓展到n个,采用拓展gcd解之即可

通解: 对于x%a0≡b0...等一系列方程组

            我们可以令M=Πai

            对于每一个xi,求出Mixi≡1(mode ai)的xi

            其中Mi=M/ai

            则最终所求的x=Σ(Mibixi)%M

            例:曹冲养猪

线性筛:线性筛可以筛:

            素数+欧拉函数:

            void eular()
{
for(int i=2;i<=maxN;i++)
{
if(used[i]==0)
{
prime[++cnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=cnt&&i*prime[j]<=maxN;j++)
{
used[i*prime[j]]=1;
if(i%prime[j]==0)
{
phi[i*prime[j]]=phi[i]*prime[j];
break;
}else
{
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
}
} 素数+约数个数: void make(int n)//线性筛
{
f[1]=1;//初值
for(int i=2;i<=n;i++)
{
if(used[i]==0)//未被标记
{
f[i]=2;//该数为素数
p[++cnt]=i;
d[i]=1;//该数最大次数为1
}
for(int j=1;j<=cnt&&i*p[j]<=n;j++)
{
used[i*p[j]]=1;//打标记
if(i%p[j]==0)//该数中有这一质因子
{
f[i*p[j]]=f[i]/(d[i]+1)*(d[i]+2);//此二数之积的因数个数应为其中一数的因数个数再多一个该质数
d[i*p[j]]=d[i]+1;//最小质因子最高次幂就是其加上1
break;
}
f[i*p[j]]=f[i]*2;//搞定
d[i*p[j]]=1;
}
}
} 对模mode的逆元: void init()
{
inv[1]=1;
for(int i=2;i<=maxn;i++)
{
inv[i]=(mode-mode/i)*inv[mode%i]%mode;
}
inv[0]=1;
for(int i=1;i<=maxn;i++)
{
inv[i]=inv[i-1]*inv[i]%mode;
}
jiecheng[1]=1;
for(int i=2;i<=maxn;i++)
{
jiecheng[i]=jiecheng[i-1]*i%mode;
}
}

以及混合起来的万能筛:

 #include <cstdio>
#define mode 998244353
#define maxn 1000000
using namespace std;
bool used[1000006];
int prime[1000006];//素数
int fac[1000006];//约数个数
int mi[1000006];//约数的最高次幂
int inv[1000006];//对mode的逆元
int phi[1000006];//欧拉函数
int cnt=0;
void init()
{
inv[0]=1;
inv[1]=1;
fac[1]=1;
for(int i=2;i<=maxn;i++)
{
inv[i]=(mode-mode/i)*inv[mode%i]%mode;
if(!used[i])
{
prime[++cnt]=i;
fac[i]=2;
mi[i]=1;
phi[i]=i-1;
}
for(int j=1;j<=cnt&&i*prime[j]<=maxn;j++)
{
used[i*prime[j]]=1;
if(i%prime[j]==0)
{
fac[i*prime[j]]=fac[i]/(mi[i]+1)*(mi[i]+2);
mi[i*prime[j]]=mi[i]+1;
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*phi[prime[j]];
fac[i*prime[j]]=fac[i]*2;
mi[i*prime[j]]=1;
}
}
}
int main()
{
init();
for(int i=1;i<=cnt;i++)
{
printf("%d\n",prime[i]);
}
return 0;
}

数论知识点总结(noip范围)的更多相关文章

  1. NOIp 基础数论知识点总结

    推荐阅读 NOIp 数学知识点总结: https://www.cnblogs.com/greyqz/p/maths.html Basic 常用素数表:https://www.cnblogs.com/g ...

  2. Collections 索引

    About Me NOIp 数据结构专题总结 NOIp 图论算法专题总结 NOIp 基础数论知识点总结 NOIp 数学知识点总结 搜索算法总结 (不包含朴素 DFS, BFS) 位运算 字符串算法总结 ...

  3. Noip前的大抱佛脚----数论

    目录 数论 知识点 Exgcd 逆元 gcd 欧拉函数\(\varphi(x)\) CRT&EXCRT BSGS&EXBSGS FFT/NTT/MTT/FWT 组合公式 斯特林数 卡塔 ...

  4. NOIp 数学知识点总结

    推荐阅读 NOIp 基础数论知识点总结: https://www.cnblogs.com/greyqz/p/number.html 排列组合 常用公式 排列:\[\displaystyle A_n^m ...

  5. Codevs 1200 同余方程 2012年NOIP全国联赛提高组

    1200 同余方程 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 求关于 x 同余方程 a ...

  6. WC2019 20天训练

    Day -1 2019.1.2 初步计划: 0x60 图论 std 洛谷提高剩余练习 NOIP2018遗留题解 洛谷省选基础练习 数学: 1.数论 2.组合数学(练习:莫比乌斯反演) 3.概率(练习: ...

  7. [HNOI2002]跳蚤 【容斥】

    题目描述 Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最 ...

  8. 扩展gcd codevs 1200 同余方程

    codevs 1200 同余方程 2012年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 求关 ...

  9. Noip知识点备考

    作为一个oier,适当的整理是有必要的.蒟蒻根据自己的理解,筛选出考noip应当掌握的知识点.可能后期还有解题思路和模板,先挖个坑慢慢补呗. 60级张炳琪Noip知识点总结 可能是本人比较弱,写的内容 ...

随机推荐

  1. 【CSS】定义元素的对齐方式

    1.文本内容居中对齐:text-align.扩展用法:父元素嵌套子元素时,且子元素的宽度小于父元素宽度,使用text-align:center,可以实现子元素的居中对齐. <!DOCTYPE h ...

  2. 第一模块:python基础语法

    Python基础[day01]:python介绍发展史(一) Python基础[day01]:Hello World程序(二) Python基础[day01]:表达式if ...else语句(三) P ...

  3. vue基础篇---修改对象或数组的值,页面实时刷新

    这个问题估计大家很难想到,如果一个数组[1,2,3,4],然后我们v-for遍历,我们改变数组的值,arr[1] = 5 ,难道不应该改变么?按理说根据vue的特性应该是改变的,但是事实上确实数组已经 ...

  4. Hive记录-部署Hive环境

    1.配置 hive1.2.0(前提要配置hadoop2.7.2,前面文档有介绍) #官网下载二进制包,解压到/usr/app 下,配置/etc/profile: export HIVE_HOME=/u ...

  5. lucene教程【转】【补】

    现实流程 lucene 相关jar包 第一个:Lucene-core-4.0.0.jar, 其中包括了常用的文档,索引,搜索,存储等相关核心代码. 第二个:Lucene-analyzers-commo ...

  6. 从零开始搭建Salt Web之初探salt-api

    Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...

  7. 浅谈分词算法(4)基于字的分词方法(CRF)

    目录 前言 目录 条件随机场(conditional random field CRF) 核心点 线性链条件随机场 简化形式 CRF分词 CRF VS HMM 代码实现 训练代码 实验结果 参考文献 ...

  8. 【转】基于VSM的命名实体识别、歧义消解和指代消解

    原文地址:http://blog.csdn.net/eastmount/article/details/48566671 版权声明:本文为博主原创文章,转载请注明CSDN博客源地址!共同学习,一起进步 ...

  9. Python异常处理和进程线程-day09

    写在前面 上课第九天,打卡: 最坏的结果,不过是大器晚成: 一.异常处理 - 1.语法错误导致的异常 - 这种错误,根本过不了python解释器的语法检测,必须在程序运行前就修正: - 2.逻辑上的异 ...

  10. C# 生成一个带数字的饼图

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...