数论总结 2012-09-05

比较愚钝,一点点数论花了好长时间才弄明白,小小总结下。

①最大公约数 (辗转相除法)

Function gcd(a,b:longint):longint;

begin

if b=0 then gcd:=a

else gcd:=gcd(b,a mod b);

end;

②最小公倍数

lcm(a,b)*gcd(a,b)=a*b

lcm(a,b)=a*b/gcd(a,b);

③素数表

筛法

④素数测试

Miller-Rabbin测试 :

如 果存在和n互质的正整数a  满足 a^(n-1)=1(mod n) (费马小定理推得),则称n为基于a的伪素数。不断选取不超过 n-1的 基 b (s次),计算是否每次都有 b^(n-1)=1 (mod n)。若每次都成立则几乎可以断定 n为素数。    (摘自《算法艺术与信息学竞 赛》)

⑤扩展欧几里德

如果  d=gcd(a,b) 那么一定存在 x,y 使得  ax+by=d。

Function extended_gcd(a,b:longint;var x,y:longint):longint;

var k:longint;

begin

if  b=0 then begin

extended_gcd:=a;

x:=1;y:=0;

end

else begin

extended_gcd:=extended_gcd(b,a mod b,x,y);

k:=x;

x:=y;

y:=k-(a div b)*y;

end;

end;

⑥快速幂(非递归写法)

Function  pow(k,q:longint):longint;

begin

pow:=1;

while q<>0 do

begin

if q mod 2=1 then pow:=pow*k;

k:=k*k;

q:=q div 2;

end;    

end;

⑦线性模方程

解 ax=c (mod b)

ax+by=c

设  d=gcd(a,b);

则问题有整数解的充要条件为  c mod d=0

令 a=a‘*d , b=b‘*d

则  gcd(a‘,b‘)=1

原方程可化为   a‘x+b‘y=c/d

通过扩展欧几里德解  a‘x‘+b‘y‘=1 得出 x‘和y‘

而 x=x‘*c/d   y=y‘*c/d

但这只是其中一组解 mod b条件下所有的解为

xi=x0+i*(b/d)   (i=1,2,3,.....,d-1)    x0为任意一个解

⑧线性模方程组

解一系列   x=ai (mod bi)   (2<=i<=n)

先考虑简单的情况    n=2的时候

即     x=a1 (mod b1);

x=a2 (mod b2);

即    x=a1+b1*y1

x=a2+b2*y2

a1+b1y1=a2+b2y2  -->   b1y1-b2y2=a2-a1

很容易的转化成了线性模方程

同样 令 d=gcd(b1,b2);

线性方程组无解的情况即    (a2-a1) mod d<>0

同线性模方程 通过扩展欧几里德解出 y1,y2的值

则x=a1+b1*y1=a2+b1*y2  也就解出了两个方程的解

x的最小非负整数解为   x=((x mod lcm(b1,b2))+lcm(b1,b2))mod lcm(b1,b2);

推广到多个方程组的情况

将两个方程组合并,即:  令两个方程得出的x值为q,

则合并成的新方程为   x=q (mod lcm(b1,b2));

将所有方程两两合并,最终也就得出了最终的答案。

⑨中国剩余定理

同样对于一系列   x=ai (mod bi)  (且所有的bi两两互质)

x在模  b1*b2...bn 下有唯一解

b=b1*b2*......*bn

对于每一个bi 求出一个pi,pi=b/bi

且  pi=1 (mod bi)

即求解   pi*xi+bi*yi=1 ,易知 gcd(pi,bi)=1, 扩展欧几里德解之。

而最终的答案即为  X=p1*x1* a1+p2*x2*a2+......+pn*xn*an

⑩乘法逆元

ax=1 (mod b)    x存在当且仅当  gcd(a,b)=1

x即为a的乘法逆元

一般在计算模上的除法时,转换为乘上除数的乘法逆元

11.关于计算模上的除法

由费马定理可知,当a,p互质时  a^p=a (mod p)--> a^(p-2)=a^-1 (mod p)

求   (1/a) mod p 即 a^-1 mod p=a^(p-2)  (mod p) 所以就求出了  (1/a)mod p

12.处理的模数不是质数又要处理除法

把模数拆成pi^ci的积

分别处理

用中国剩余定理合并解答

13.欧拉函数

φ(n)为小于等于n的数中与n互质的数的数目。

n=p1^q1*p2^q2*p3^q3*...*pk^qk    (p为互异的质因数)

φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)*...*(1-1/pk)

φ(n)为积性函数 如果 (a,b)=1 then φ(ab)=φ(a)φ(b)

欧拉定理: (a,b)=1   a^φ(b)=1  (mod b)

14.约数和

对与A的约数和

A=p1^k1*p2^k2*...*pn^kn

S = (1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (1+p3+ p3^3+…+ p3^k3) * .... * (1+pn+pn^2+pn^3+...pn^kn)

时间: 2024-10-14 05:02:49

数论总结 2012-09-05的相关文章

Lucene 简单手记http://www.cnblogs.com/hoojo/archive/2012/09/05/2671678.html

什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式.这个过程类似于通过字典中的检索字表查字的过程. 全 文检索的方法主要分为按字检索和按词检索两种.按字检索是指对于文章中的每一个字都建立索引,检索时将词分解为字的组合.对于各种不同的语言而言,字有不 同的含义,比如英文中字与词实际上是合一的,而中文中字与词有很大分别.按词

oracle__学习笔记2014.09.05

oracle学习笔记2014.09.05 测试数据库配置的信息 全局数据库名:xiuhao 系统标识符(SID):xiuhao 服务器参数文件名:c:\oracle\dbs\spfilexiuhao.ora database control URL: http://C-1:5500/em sys以及system解锁 edit 以文本格式打开当前命令/ / 执行当前命令 l [num] 显示缓存区命令 get [file] 把file中的文件加入到缓冲区 c /[str] /[str] 修改当前语

2015.09.05 C++中类的static与const成员

static 对于特定类类型的全体对象而言,访问一个全局对象有时是必要的.也许,在程序的任意点需要统计已创建的特定类类型对象的数量:或者,全局对象可能是指向类的错误处理例程的一个指针:或者,它是指向类类型对象的内在自由存储区的一个指针.然而,全局对象会破坏封装:对象需要支持特定类抽象的实现.如果对象是全局的,一般的用户代码就可以修改这个值.类可以定义类 静态成员,而不是定义一个可普遍访问的全局对象.通常,非 static 数据成员存在于类类型的每个对象中.不像普通的数据成员,static 数据成

2015.09.05 组成原理笔记

一二.概论 三.系统总线 四.存储器 1. 存储器层次结构: 寄存器 缓存(Cache) 主存 辅存(磁盘,磁带) 2. 静态RAM[坑] 动态RAM[坑] ROM 只读存储器 PROM (一次性)可编程只读存储器 EPROM 可擦除可编程只读存储器 EEPROM 电擦除可编程只读存储器 Flash Memory 闪存 3. Cache地址映射[坑]

2015.09.05 网络笔记

IPv4地址 {<网络号><主机号>} 主机号全为零的表示网络本身,全为1的表示网络的广播地址 A类:1~126,网络号为第一个字节 B类:128~191,网络号为前两个字节 C类:192~223,网络号为前三个字节 D类:224~239,多播地址 私有IP地址(可以被LAN重复使用) A类:10 B类:172.16~172.31 D类:192.168

编辑距离及编辑距离算法 (一)摘自http://www.cnblogs.com/biyeymyhjob/archive/2012/09/28/2707343.html

编辑距离及编辑距离算法 编辑距离概念描述: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符. 例如将kitten一字转成sitting: sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念. 问题:找出字符串的编辑距离,即把一个字符串s1最少经过多少步操作变成编程字符串

2014.09.05

#include "MultiHide_BP.cuh" void NN_TRAIN(float* Samples, float* Targets, int LayersNum, int* Layers, float**W, float**B, float* mse){ float* gpuSamples = nullptr; float* gpuTargets = nullptr; float* gpuMse = nullptr; float* cpuMse = (float*)mal

(转)Jquery最实用的实例及源码(http://www.cnblogs.com/kingfly/archive/2012/12/05/2802539.html)

1:窗口拖动 http://jqueryui.com/resizable/#max-min 2:导航条前后顺序拖动 http://jqueryui.com/sortable/ 3:类似百度首页板块顺序拖动http://jqueryui.com/sortable/#portlets 4:选择日期http://jqueryui.com/datepicker/#default 5:不带遮罩的弹出框(官网上第3个例子中有带遮罩)http://jqueryui.com/dialog/#default 6:

距离计算方法总结 转自http://www.cnblogs.com/xbinworld/archive/2012/09/24/2700572.html#2663469

在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的“距离”(Distance).采用什么样的方法计算距离是很讲究,甚至关系到分类的正确与否. 本文的目的就是对常用的相似性度量作一个总结. 本文目录: 1. 欧氏距离 2. 曼哈顿距离 3. 切比雪夫距离 4. 闵可夫斯基距离 5. 标准化欧氏距离 6. 马氏距离 7. 夹角余弦 8. 汉明距离 9. 杰卡德距离 & 杰卡德相似系数 10. 相关系数 & 相关距离

C++了解free和delete(转自:http://www.cnblogs.com/mrye/archive/2012/09/01/2667079.html)

void MyMethod1() {     using namespace std;     int a=6;     int b=6;     int* pa=new int;     int* pb=new int;     *pa=a;     pb=pa;     cout<<"pa的内容赋值为:"<<a<<endl;     delete(pa);     //free(pa);//加上这句造成pa不可用,     //cout<&