[SinGuLaRiTy] 数论基础
【SinGuLaRiTy-1004】 Copyright (c) SinGuLaRiTy 2017 . All Rights Reserved.
整除
基本概念
设a,b为整数,且a不为0,如果存在一个整数q,使得a*q=b,则b能被a整除,记为a|b,且称b是a的倍数,a是b的因子。
性质
(1)如果a|b且b|c,则a|c ;
(2)a|b且a|c等价于对于任意的整数x,y,有a|(bx+cy) ;
(3)设m不为0,则a|b等价于ma|mb ;
(4)设整数x,y满足下式:ax+by=1,且a|n,b|n,那么(ab)|n ;
(5)若b=q*d+c,那么d|b的充要条件是d|c ;
<补充拓展>
(1)若2能整除a的最末位,则2|a
证明:若原数减去自己的最末尾,得到的数一定能被10整除,即一定能被2整除,又因为最末尾也能被2整除,则原数一定能被2整除
(2)若4能整除a的末两位,则4|a
证明:原理与(1)的相似。若原数减去自己的末两位尾数,得到的数一定能被100整除,即一定能被4整除,又因为末两位也能被4整除,则原数一定能被4整除
(3)若8能整除a的末三位,则8|a
证明:原理与(1)(2)相似。
(4)若3能整除a的各位数字之和,则3|a
证明:设任意一个数S=a*10^0+b*10^1+c*10^2+d*10^3+......
=(a+b+c+d+......)+9b+99c+999d+9999e+......
由于3|(a+b+c+d+......),3|(9b+99c+999d+9999e+......),则3|S
(5)若9能整除a的各位数字之和,则9|a
证明:原理与(4)相同。
(6)若11能整除a的偶数位数字之和与奇数位数字之和的差,则11|a
证明:设任意一个数S=a*10^0+b*10^1+c*10^2+d*10^3+......
=(a-b+c-d+......)+11b+99c+1001d+......
由于11|(a-b+c-d+......),11|(11b+99c+1001d+......),则11|S
(7)能被7、11、13整除的数的特征是:这个数的末三位与末三位以前的数字所组成数之差能被7、11、13整除。
证明:原理与(6)相同。
GCD & LCM:
*一般的,设a1,a2,a3,……ak是k个正整数,如果存在一个正整数d,使得d|a1,d|a2,……d|ak,那么d则为a1,a2,……ak的公约数,其中最大的称为最大公约数,即为gcd(a1,a2,……,ak),显然它是存在的,至少为1。当gcd=1时,称这n个数是互质的或既约的。公约数一定是最大公约数的约数。
*一般的,设a1,a2,a3,……ak是k个正整数,如果存在一个正整数d,使得a1|d,a2|d,a3|d,……ak|d,那么d则为a1,a2,……ak的公倍数,其中最小的称为最小公倍数数,记为lcm。
<欧几里得算法(辗转相除法)>
gcd(a,b)=gcd(b,a%b)
性质:若a,b为偶数,则gcd(a,b)=2*gcd(a/2,b/2);若a偶b奇,则gcd(a,b)=gcd(a/2,b)。
<实现代码>
long long gcd(long long x,long long y){
if(x>y)return gcd(y,x);
if(x==)return y;
return gcd(y%x,x);
}
由于有lcm(a,b)*gcd(a,b)=a*b,则lcm(a,b)=a*b/gcd(a,b)。
勾股数:
对于正整数x,y,z,如果满足等式:x^2+y^2=z^2,则称这组整数(x,y,z)为勾股数。换句话说,凡是可以构成直角三角形的整数即称为勾股数。
x,y,z两两互质的勾股数称为基本勾股数,如(3,4,5),(5,12,13),其他勾股数称为派生勾股数。基本勾股数乘以一个系数则可以得到派生勾股数。
基本勾股数的奇偶性?
一定是二奇一偶,且最大的为奇数。
所有的基本勾股数都可以写成如下形式:
x=2mn,y=m^2-n^2,z=m^2+n^2 (m>n)
通过它可以枚举基本勾股数。
<勾股数完全公式>
a=m,b=(m^2/k-k) / 2,c=(m^2/k+k)/2 其中m≥3
⒈ 当m确定为任意一个≥3的奇数时,k={1,m^2的所有小于m的因子}
⒉ 当m确定为任意一个 ≥4的偶数时,k={m^2 / 2的所有小于m的偶数因子}
通过此公式可以求出所有的基本勾股数和派生勾股数,并可以求出给定a
时勾股数的组数。
<求勾股数的组数>
当a给定时,不同勾股数组a,b,c的组数N等于①式中k的可取值个数
⒈ 取奇数a=P1^M1×P2^M2×……×Pr^Mr,其中k={1,a^2的所有小于a的因子},则k的可取值个数:
N=[(2*M1+1)×(2M2+1)×……×(2Mr+1)-1]/2
⒉ 取偶数a=2^M0×P1^M1×P2^M2×……×Pr^Mr,其中k={a^2/2的所有小于a的偶数因子},则k的可取值个数:
N=[(2M0-1)×(2M1+1)×(2M2+1)×……×(2Mr+1)-1]/2
其中,P1,P2,……,Pr为互不相同的奇素数,M0,M1,……,Mr为幂指数。
模运算:
<小整数的幂取模>
#define LL long long int
LL power(int a,int b,int p) //a^b%p
{
int t=a,res=;
while(b)
{
if(b&)
res=res*t%p;
t=t*t%p;
b>>=;
}
}
<大整数的模乘法>
#define LL long long int
LL mul(LL a, LL b, LL p) //a*b%p
{
LL rn=, i;
for(i=; i<=b; i<<=,a=(a<<)%p)
if(b&i)
rn=(rn+a)%p;
return rn;
}
<大整数的幂取模>
#define LL long long int
LL ksm(LL a, LL b, LL p)
{
LL rn=;
for(; b; a=mul(a,a,p),b>>=)
if(b&)
rn=mul(rn,a,p);
return rn;
}
素数:
对于一个正整数n,如果它的约数只有1和n,则称n为质数。质数不包含1。
(1)素数有无穷多个。
(2)不超过n的素数个数可粗略估计为n/ln(n)
(3)任何大于1的非素数n,那么在[1,sqrt(n)]区间内至少存在一个素数。
<整数唯一分解定理>
任意一个大于1的整数n,均可以表示为若干个素数的乘积,且这个形式是唯一的。
n=p1^m1*p2^m2*……pk^mk
其中,p1,p2,……pk 为n的质因子。
<简单的素数判断>
bool prime(int num)
{
for(int i=;i*i<=num;i++)
{
if(num%i==)
return ;
return ;
}
}
*效率更高的【米勒罗宾素数判定法】
<线性时间筛素数>
//法一
const in MAXN=+;
const int MAXP=;
int vis[MAXN];
int prime[MAXP]
void sieve(int n)
{
int m=(int)sqrt(n+0.5);
memset(vis,,sizeof(vis));
for(int i=;i<=m;i++)
if(!vis[i])
for(int j=i*i;j<=n;j+=i)
vis[j]=;
}
//法二
int prime[MAXP];
bool flag[MAXN];
int j=;
for(int i=;i<=n;i++)
{
if(flag[i]==)
prime[j++]=i;
for(int k=;k<j;k++)
{
if(prime[k]*i>n)break;
flag[prime[k]*i]=;
if(i%prime[k]==)break;
}
}
同余:
若a%m=b%m,则称a与B关于模m同余,记为a≡b(mod m)
性质:
(1)自反性: a≡a(mod m)
(2)对称性:若 a≡b(mod m),则 b≡a(mod m)
(3)传递性:若a≡b(mod m),b≡c(mod m),则 a≡c(mod m)
(4)同加性:若a≡b(mod m),则a+c≡b+c(mod m)
(5)同乘性:若a≡b(mod m),则a*c≡b*c(mod m)
若a≡b(mod m),c≡d(mod m),则有a*c≡b*d(mod m)
(6)同幂性:若a≡b(mod m),则an≡bn(mod m)
(7)若a%p=x,a%q=x,且p,q互质,则a%(p*q)=x
<同余分配率>
加法分配率:(a+b)%n=(a%n+b%n)%n
减法分配率:(a-b)%n=(a%n-b%n)%n
乘法分配率:(a*b)%n=a%n*b%n%n
除法不满足分配率,但有这个性质:(a/b)%n=a%(bn)/b
<剩余系>
给定n,则所有整数对n取模,将得到一个集合,称为模n的剩余系,即{0,1,2,……,n-1}.
n的剩余系中与n互质的数称为简化剩余系,也称为缩系。n的剩余系记为Zn,而n的缩系记为Zn*.
模n的剩余系中,每个元素都代表所有与它同余的整数,比如n=7,则1代表{1,8,15,22,……},这个集合满足模n同余关系,称为同余等价类。
<威尔逊定理>
若p为素数,则(p-1)!≡-1(mod p)。 其逆定理也成立。
<费马定理>
若P为素数,a为正整数,且a和P互质,则有:a^p-1≡ 1(mod p)
<欧拉定理>
欧拉函数phi:不超过n的且与n互质的正整数的个数。
如果n为素数p,则 phi(p)=p-1
如果n为素数p的幂次p^a,则 phi(p^a)=(p-1)*p^(a-1).
欧拉函数为积性函数:如果n为任意两个互质的数a、b的积,则 phi(n)= phi(a)* phi(b)
n=p1a1*p2a2*……*pkak
则 (n)=n*(1-1/p1)*(1-1/p2)*……*(1-1/pk)
欧拉定理:
若a与m互质,则
<欧拉函数计算>
//法一
int euler(int n)
{
int m=(int)sqrt(n+0.5);
int ans=n;
for(int i=;i<=m;i++)if(n%i==)
{
ans=ans/i*(i-);
while(n%i==)n/=i;
}
if(n>)ans=ans/n*(n-);
return ans;
}
//法二(此方法更快)
int phi[maxn];
void phi_table(int n)
{
for(int i=;i<=n;i++)phi[i]=;
phi[]=;
for(int i=;i<=n;i++)if(!phi[i])
for(int j=i;j<=n;j+=i){
if(!phi[j])phi[j]=j;
phi[j]=phi[j]/i*(i-);
}
}
<扩展欧几里得算法>
对于任意整数a,b,一定存在整数x、y,使得ax+by=gcd(a,b)若gcd(a,b)=1,则一定存在整数x,y,使得ax+by=1可以使用扩展欧几里德算法求出x,y。
void gcd(LL a,LL b,LL &d,LL &x,LL &y)
{
if(!b){x=;d=a;y=;}
else {
gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
x即为a的逆元(->数学中的求导)。
运用:
(1)求二元一次方程:ax+by=c
(2)求模线性方程:ax≡b (mod n)
(3)求逆元:ab≡1 (mod n)
(4)求gcd(a,b)
<模线性方程&中国剩余定理>
有如下方程:
其中n1,n2,……,nk互质。
中国剩余定理正是用来求解模线性方程组的。
对于n1,因为它与(n2*n3……*nk)互质,我们可以找到一个系数z1,使得z1*(n2*n3*……nk)%n1=1。设z1*(n2*n3*……*nk)为c1。
同理,对于每个nk,都可以找到一个zi,使得zi*(n1*n2*……*nj |j!=i)%ni=1,设zi*(n1*n2*……*nj |j!=i)为ci。
x=b1*c1+b2*c2+……bk*ck+m(n1*n2*…*nk) 其中m为任意整数。
x为一组解。
<模乘法的逆>
如果(a*b)%n=1,则称a与b模n互为倒数,记为a=b^(-1) ,b=a^(-1),这是模乘法的逆。
若a与n互质,则必存在一个整数b,使得a*b%n=1,即a模n的逆元一定存在。
若b存在逆元,则有(a/b)%n=(a*b^(-1))%n。
证明:设b的逆元为c,则bc%n=1
(a/b)%n=((a/b)*bc)%n=a*c%n=a*b^(-1)%n
Time:2017-02-07
[SinGuLaRiTy] 数论基础的更多相关文章
- 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)
摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...
- 「kuangbin带你飞」专题十四 数论基础
layout: post title: 「kuangbin带你飞」专题十四 数论基础 author: "luowentaoaa" catalog: true tags: mathj ...
- [SinGuLaRiTy] 数论题目复习
[SinGuLaRiTy-1020] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. [CQBZOJ 1464] Hankson 题目描述 H ...
- lightoj1336数论基础
#include<iostream> #include<cstdio> #include<cmath> #define ll long long using nam ...
- 数论基础算法总结(python版)
/* Author: wsnpyo Update Date: 2014-11-16 Algorithm: 快速幂/Fermat, Solovay_Stassen, Miller-Rabin素性检验/E ...
- 从BZOJ2242看数论基础算法:快速幂,gcd,exgcd,BSGS
LINK 其实就是三个板子 1.快速幂 快速幂,通过把指数转化成二进制位来优化幂运算,基础知识 2.gcd和exgcd gcd就是所谓的辗转相除法,在这里用取模的形式体现出来 \(gcd(a,b)\) ...
- 1370 - Bi-shoe and Phi-shoe(LightOJ1370)(数论基础,欧拉函数)
http://lightoj.com/volume_showproblem.php?problem=1370 欧拉函数: 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. φ(n) ...
- kuangbin专题 数论基础 part1?
线段树专题太难了,那我来做数学吧! 但数学太难了,我......(扯 这两天想了做了查了整理了几道数学. 除了一些进阶的知识,像莫比乌斯反演,杜教筛,min25学不会我跳了,一些基础的思维还是可以记录 ...
- 密码学数论基础部分总结之 有限域GF(p) Galois Fields
今天花了一下午的时间学习密码学的数论部分,下面将学到的内容进行一下总结,也算是加深记忆.我本身对密码学这方面比较感兴趣,而且本节出现了许多数学公式,使用刚刚学习的LaTex公式来呈现出来,练习练习,何 ...
随机推荐
- Oracle RAC学习笔记02-RAC维护工具集
Oracle RAC学习笔记02-RAC维护工具集 RAC维护工具集 1.节点层 2.网络层 3.集群层 4.应用层 本文实验环境: 10.2.0.5 Clusterware + RAC 11.2.0 ...
- [solr] - solr5.2.1环境搭建 - 使用tomcat做为容器
这里忽略solr其他依赖环境的搭建,这里搭建solr5.2.1.使用Java1.7.0_17,tomcat使用6.0.36版本的. 1.下载solr压缩文件 Solr是Apache基金组织在lucen ...
- ES6__异步开发优化
一:JS事件循环 1:同步调用 同步调用是一种阻塞式调用,调用要等待双方执行完毕才返回,他是一种单向调用. 2:回调 回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口. 3: ...
- Transport (VMDB) error -44: Message
关于点击电源按钮的时候出现了这情况Transport (VMDB) error -44: Message. 虚拟机有个服务没开.开始菜单--运行--services.msc 回车 找到VMw ...
- 浅谈sql优化
问题的发现: 菜鸟D在工作的时候发现项目的sql语句很怪,例如 : select a.L_ZTBH, a.D_RQ, a.VC_BKDM, (select t.vc_name from tb ...
- Angular.js!(附:聊聊非原生框架项目)
最近,为了项目接触了一个很火的前端框架Angular.js,下面就Angular做一个简介吧(大牛请绕步,只针对没有接触过angular的人). Angular.js是一款精简的前端框架,如果要追溯它 ...
- JS中的作用域链
在js中数据的声明方式有两种: 1.用var声明,例如:var num = 10: 2.直接声明,例如:num = 10: 两种声明方式在某些情况下是有区别的: var data = 10; func ...
- x86主机搭建家庭智能路由系统 ---- Proxmox虚拟化实现一机多用
Proxmox VE简介 Proxmox VE(Proxmox Virtual Environment) 是一款完全开源虚拟化管理平台,可以管理QEMU/KVM虚拟机和LXC容器.事实上它只是一个前端 ...
- ST Lab1 junit test
代码地址: https://github.com/newff/st-lab1 Tasks: Install Junit(4.12), Hamcrest(1.3) with Eclipse Insta ...
- How to set up Tensorflow inception-v3 model on Windows
There is Inception-v3 model python implementation on GitHub at: https://github.com/tensorflow/models ...