您的位置:首页 > 其它

FCS NOI2018 DAY1(数论)

2018-02-08 21:52 211 查看

数论与组合数学基础

数论基础

整除: a整除b 记做a|b

因数与倍数: a|b即a是b的因数,b是a的倍数

带余除法: 对于整数a,b(b!=0),设a除以b的商为q,余数为r,则a=bq+r,q,r为整数且0≤r≤|b|

模: a除以b余数为r,记为a modb = r

同余: a,b模p同余即a,b除以p的余数相同,记做a≡b(mod p)

类比十进制运算个位数的规律,不难发现:

(amodp±bmodp)modp=(a±b)modp(amodp±bmodp)modp=(a±b)modp

(amodp)(bmodp)modp=abmodp(amodp)(bmodp)modp=abmodp

注意C++的取模和取余是不一样的,C++的取模是保留符号

的,如(−4) mod 3 = 2,但C++中(-4)%3=-1

质数:正因数只包含1和它本身的正整数(2,3,5,7···)

合数:正因数包含除1和它本身外的数的正整数

(4,6,8,9···)

筛质数

1.暴力枚举

枚举i=1,2,……,n 判断i是否包含【2,√i】内的因数(因数集合具有对称性) 效率太低,考虑改进!!!!

2.一种筛(不知道叫啥)

枚举正整数a,b ≥ 2且ab ≤ n,将ab标记为合数



3.埃拉托斯特尼筛法(埃氏筛法):

优化:只要枚举a为质数的ab



4.线性筛:

性筛法基本思想:每个数只被最小的质因子筛一次,即对

于a是质数,b的最小质因子不小于a的整数对a,b,标记ab为合数

实现:先枚举b,再枚举a,枚举到a|b时结束



质数分布定理:π(n) ∼n/lnn ,π(n)为n以内质数个数

所以存放质数的数组可以开小一些



给定正整数n ≤ 10 7 ,求n的质因数分解式

O(n)预处理n以内质数,同时预处理每个合数x的最小质因

子p x

每次分解不断将n提取一个p x

由于每提取一个质因子n就会减半,单次分解复杂

度O(logn)

最小公倍数与最大公约数

a,b的最大公因数为最大的正整数c,c|a且c|b,记

作c = gcd(a,b)或c = (a,b),特别地(a,0) = (0,a) = 0

a,b的最小公倍数为最小的正整数c,a|c且b|c,记

作c = lcm(a,b)或c = [a,b]

性质:

(a,b) = (a,b ± a)



(a,b) · [a,b] = ab



给定正整数a 0 ,a 1 ,b 0 ,b 1 ,求有多少个正整数x满足:

1. x和a 0 的最大公约数是a 1

2.x和b 0 的最小公倍数是b 1

不超过2000组数据,a 0 ,a 1 ,b 0 ,b 1 ≤ 2 × 10 9



原根



常用的数论函数



注意!!!





欧拉函数



容斥原理









莫比乌斯函数



莫比乌斯反演

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: