数论算法

数论算法
数论算法

数论

素数问题、同余问题、中国剩余定理、Nim积、高斯消元法求线性方

程组解、Pell方程、polya计数、矩阵二分快速幂、伪素数、基本数

值计算方法(定积分求解,多项式求根,周期性方程)

1、与整数除法运算相关的算法

整除问题:

欧几里得算法及利用其求最小公倍数:

拓展欧几里得算法及利用其解线性同余方程:

a^b%c几种计算方法

中国剩余定理

#include

using namespace std;

int ext_gcd(int a, int b, int &x, int &y)

{

int tmp,d;

if(b == 0)

{

x = 1;

y = 0;

return a;

}

d = ext_gcd(b, a % b, x, y);

tmp = x;

x = y;

y = tmp - a/b*y;

return d;

}

int China_theory(int a[],int b[],int n)

{

int res = 0,m,*m1,M = 1,temp;

m1 = new int[n];

memset(m1, 0, sizeof(m1));

for(int i = 0; i < n; i++)

M *= a[i];

for(int i = 0; i < n; i++)

{

m = M / a[i];

ext_gcd(m, a[i], m1[i],temp);

res = res % M + (m * m1[i] * b[i]) % M;--

res =(res + M) % M;

}

delete m1;

return res;

}

int main()

{

int *a, *b, n;

while(scanf("%d",&n) && n != 0)

{

a = new int[n];

b = new int[n];

for(int i = 0; i < n; i++)

scanf("%d",&a[i]);

for(int i = 0; i < n; i++)

scanf("%d",&b[i]);

printf("%d\n",China_theory(a,b,n));

delete a;

delete b;

}

return 0;

}

2、素数相关问题

素数无穷性证明:

//欧几里德的精彩反证:

/*

假设结论不成立,即只有有限多的素数p1,p2,...,pn。

令m=1+TT(1<=i<=n)pi,即所有素数的乘积,再加一。

因为这个m比所有的素数都大,因此一定是合数。换句换说,某个素数能够整除它。

哪一个素数能整除它呢?不难知道,m不能被p1整除,因为m除以p1的余数为1。

同样的,m也不能被p2整除,因为余数也是1。事实上,当m除以任何一个pi时,余数总是1。

如果m真是合数,唯一的可能是:p1,p2,...,pn并没有包括所有的素数。

但这又和假设矛盾。

结论:素数有无穷多个!

*/

/*

素数不仅是无穷多的,而且还不算特别少。不超过x的素数大约有x/lnx个。

换句话说:大约每lnx个整数中就有一个是素数。

*/

筛法求素数:

#include

#include

#include

using namespace std;

void prime(bool *&b,int n)

{

int i,j;

b=new bool[n];

memset(b,1,sizeof(b));

b[0]=0;

for(i=2;i<=sqrt(n)+1;i++)

if(b[i-1])

for(j=1;i-1+j*i

b[i-1+j*i]=0;

for(i=0;i

if(b[i])

printf("%d\n",i+1);

}

int main()

{

//freopen("out.txt","w",stdout);

int n;

bool *b;

scanf("%d",&n);

prime(b,n);

return 0;

}

基本素数判定方法及几步改进:费马小定理:

自己的想法及错误:

米勒-勒宾测试:

整数因子分解pollard-rho算法:1、比较傻的方法(打素数表)

#include

#include

#define MAX 10000000

using namespace std;

struct power{

int x;

int y;

};

power a[MAX];

int grid(power a[],int n)

{

int i,j,k=0,p=n-1;

bool *b=new bool[n];

memset(b,1,sizeof(b));

b[0]=0;

for(i=2;i<=sqrt(double(n))+1;i++)

if(b[i-1])

for(j=1;i-1+j*i

b[i-1+j*i]=0;

for(i=0;i

if(b[i])

a[k++].x=i+1;

return k;

}

void devide(power a[],int n,int h)

{

int i;

for(;n>1;)

{

for(i=0;i

{

if(n%a[i].x==0)

{

n/=a[i].x;

a[i].y++;

break;

}

}

}

}

int main()

{

int n,h;

while(scanf("%d",&n)!=EOF)

{

for(int j=0;j

{

a[j].x=0;

a[j].y=0;

}

h=grid(a,n);

devide(a,n,h);

for(int i=0;i

{

if(a[i].y!=0)

printf("%d %d\n",a[i].x,a[i].y);

}

}

return 0;

}

2、比较优化的方法(不用打素数表)

int divide(__int64 n)

{

memset(a,0,sizeof(a));

__int64 i,k = 0;

for(i = 2; i <= sqrt(double(n)); i++)

{

if(n % i == 0)

{

while(n % i == 0)

{

n /= i;

a[k]++;

}

k++;

}

}

if(n != 1) a[k++]++;

return k;

}

N!末尾0的个数

用N一直除5,知道商为0,将各次商相加即得答案N!的素因子分解:

#include

#include

using namespace std;

void prime(bool *&b,int n){

int i,j;

b=new bool[n];

memset(b,1,sizeof(b));

b[0]=0;

for(i=2;i<=sqrt(n)+1;i++){

if(b[i-1])

for(j=1;i-1+j*i

b[i-1+j*i]=0;

}

int count_mod(int a,int n){

int sum=0,i=a;

for(;a<=n;a*=i)

sum+=n/a;

return sum;

}

int main(){

int i,n;

bool *b;

while(scanf("%d",&n)!=EOF){

prime(b,n);

for(i=0;i

if(b[i])

printf("%d %d\n",i+1,count_mod(i+1,n));

}

return 0;

}

欧拉公式:

欧拉φ函数:φ(n)是所有小于n的正整数里,和n互素的整数的个数。n是一个正整数。欧拉证明了下面这个式子:如果n的标准素因子分解式是p1^a1*p2^a2*……*pm^am,其中众pj(j=1,2,……,m)都是素数,而且两两不等。则有φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm) 利用容斥原理可以证明它。*写程序的时候,公式貌似不可以用

不借助质数表

int euler(int n){

int m = n, i;

if(n % 2 == 0) m /= 2;

while(n % 2 == 0) n /= 2;

for(i = 3; n != 1; i += 2){

if(n % i == 0) m -= m / i;

while(n % i == 0) n /= i;

}

return m;

}

借助质数表

const int maxn = 40000;

bool pf[maxn];

int p[maxn], numOfP = 0;

void init(){

memset(pf, 0, sizeof(pf));

for(int i = 2; i < maxn; i++){

if(!pf[i]){

p[numOfP++] = i;

for(int j = i * i; j < maxn; j += i)

pf[j] = true;

}

}

}

int euler1(int n){

int sum = 1;

int tmp;

for(int i = 0; i < numOfP; i++){

if(n == 1) break;

if(n % p[i] == 0){

tmp = 0;

while(n % p[i] == 0){

n /= p[i];

tmp++;

}

for(int j = 1; j < tmp; j++)

sum *= p[i];

sum *= p[i] - 1;

}

}

if(n == 1)

return sum;

else

return sum * (n - 1);

}

int euler2(int n)

{

int i;

for(i = 2; i <= sqrt((double)n); i++){

if(n % i == 0 && !pf[i]){

n /= i;

if(n % i ==0)

return i * euler2(n);

else

return (i - 1) * euler2(n);

}

}

return n-1;

}

反素数:

数论四大经典定理:

威尔逊定理:

若p为质数,则p可整除(p-1)!+1。

欧拉定理(也称费马-欧拉定理)

若n,a为正整数,且n,a互素,(a,n) = 1,则a^φ(n) ≡ 1 (mod n)

孙子定理(又称中国剩余定理)

公元前后的《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何?”答为“23”。明朝程大位用歌谣给出了该题的解法:“三人同行七十稀,五树梅花廿一枝,七子团圆月正半,除百零五便得知。” 以现代的说法,是找出三个关键数70,21,15。解法的意思就是用70乘3除所得的余数,21乘5除所得的馀数,15乘7除所得的余数,然後总加起来,除以105的余数就是答案。

费马小定理

假如p是质数,且(a,p)=1,那么a^(p-1) ≡1(mod p)。假如p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1。

Poj1730

Perfect Pth Powers

Time Limit: 1000MS Memory Limit: 10000K

Total Submissions: 10870 Accepted: 2429

Description

We say that x is a perfect square if, for some integer b, x = b2. Similarly, x is a perfect cube if, for some integer b, x = b3. More generally, x is a perfect pth power if, for some integer b, x = b p. Given an integer x you are to determine the largest p such that x is a perfect p th power.

Input

Each test case is given by a line of input containing x. The value of x will have magnitude at least 2 and be within the range of a (32-bit) int in C, C++, and Java. A line containing 0 follows the last test case.

Output

For each test case, output a line giving the largest integer p such that x is a perfect

p th power.

Sample Input

17

1073741824

25

Sample Output

1

30

2

程序

#include

#include

#include

#include

#define max 10000

using namespace std;

__int64 a[max];

inline

int divide(__int64 n)

{

memset(a,0,sizeof(a));

__int64 i,k = 0;

for(i = 2; i <= sqrt(double(n)); i++)

{

if(n % i == 0)

{

while(n % i == 0)

{

n /= i;

a[k]++;

}

k++;

}

}

if(n != 1) a[k++]++;

return k;

}

inline

int gcd(int a,int b)

{

if(b == 0) return a;

else return gcd(b,a%b);

}

int main()

{

__int64 n;

while(scanf("%I64d",&n) && n != 0)

{

__int64 h,m,g=0;

__int64 p;

if(n < 0) p = -n;

else p = n;

m = divide(p);

for(h = 0; h < m; h++)

{

g = gcd(g,a[h]);

}

if(n < 0)

while(g % 2 == 0)

g /= 2;

printf("%I64d\n",g);

}

return 0;

}

高中数学竞赛中数论问题的常用方法

高中数学竞赛中数论问题的常用方法 数论是研究数的性质的一门科学,它与中学数学教育有密切的联系.数论问题解法灵活,题型丰富,它是中学数学竞赛试题的源泉之一.下面介绍数论试题的常用方法. 1.基本原理 为了使用方便,我们将数论中的一些概念和结论摘录如下: 我们用),...,,(21n a a a 表示整数1a ,2a ,…,n a 的最大公约数.用[1a ,2a ,…,n a ]表示1a ,2a ,…,n a 的 最小公倍数.对于实数x ,用[x ]表示不超过x 的最大整数,用{x }=x -[x ]表示x 的小数部分.对于整数 b a ,,若)(|b a m -,,1≥m 则称b a ,关于模m 同余,记为)(mod m b a ≡.对于正整数m ,用)(m ?表示 {1,2,…,m }中与m 互质的整数的个数,并称)(m ?为欧拉函数.对于正整数m ,若整数m r r r ,...,,21中任何两个数对模m 均不同余,则称{m r r r ,...,,21}为模m 的一个完全剩余系;若整数)(21,...,,m r r r ?中每一个数都与m 互质,且其中任何两个数关于模m 不同余,则称{)(21,...,,m r r r ?}为模m 的简化剩余系. 定理1 设b a ,的最大公约数为d ,则存在整数y x ,,使得yb xa d +=. 定理2(1)若)(mod m b a i i ≡,1=i ,2,…,n ,)(m od 21m x x =,则 1 1n i i i a x =∑≡2 1 n i i i b x =∑; (2)若)(mod m b a ≡,),(b a d =,m d |,则 )(mod d m d b d a ≡; (3)若b a ≡,),(b a d =,且1),(=m d ,则)(mod m d b d a ≡; (4)若b a ≡(i m mod ),n i ,...,2,1=,M=[n m m m ,...,,21],则b a ≡(M mod ). 定理3(1)1][][1+<≤<-x x x x ; (2)][][][y x y x +≥+; (3)设p 为素数,则在!n 质因数分解中,p 的指数为 ∑≥1 k k p n . 定理4 (1)若{m r r r ,...,,21}是模m 的完全剩余系,1),(=m a ,则{b ar b ar b ar m +++,...,,21}也是模 m 的完全剩余系; (2)若{)(21,...,,m r r r ?}是模m 的简化剩余系,1),(=m a ,则{)(21...,,m ar ar ar ?}是模m 的简化剩余系. 定理5(1)若1),(=n m ,则)()()(n m mn ???=. (2)若n 的标准分解式为k k p p p n ααα (2) 121=,其中k ααα,...,21为正整数,k p p p ,...,21为互不相

数论算法

数论 素数问题、同余问题、中国剩余定理、Nim积、高斯消元法求线性方 程组解、Pell方程、polya计数、矩阵二分快速幂、伪素数、基本数 值计算方法(定积分求解,多项式求根,周期性方程) 1、与整数除法运算相关的算法 整除问题: 欧几里得算法及利用其求最小公倍数: 拓展欧几里得算法及利用其解线性同余方程: a^b%c几种计算方法 中国剩余定理 #include using namespace std; int ext_gcd(int a, int b, int &x, int &y) { int tmp,d; if(b == 0) { x = 1; y = 0; return a; } d = ext_gcd(b, a % b, x, y); tmp = x; x = y; y = tmp - a/b*y; return d; } int China_theory(int a[],int b[],int n) { int res = 0,m,*m1,M = 1,temp; m1 = new int[n]; memset(m1, 0, sizeof(m1)); for(int i = 0; i < n; i++) M *= a[i]; for(int i = 0; i < n; i++) { m = M / a[i]; ext_gcd(m, a[i], m1[i],temp); res = res % M + (m * m1[i] * b[i]) % M;-- res =(res + M) % M; } delete m1; return res; } int main() { int *a, *b, n; while(scanf("%d",&n) && n != 0) { a = new int[n]; b = new int[n];

超难奥数题之数论专题:穷举用技巧

穷举用技巧 【例1】 N是一个各位数字互不相等的自然数,它能被它的每个数字整除。N的最大值是。 【例2】 如果连续N个自然数,每个自然数的数字和都不是11的倍数,则称这连续的N个自然数为一条“龙”,n为这条龙的长度。比如1,2,3,…,28就是一条龙,它的长度是28。问:龙的长度最长可以为多少?写出一条最长的龙。 【例3】 黑板上写有1、2、3、……、100这100个自然数,甲、乙二人轮流每次每人划去一个数,直到剩下两个数为止。如剩下的两数互质则判甲胜,否则判乙胜。 ⑴乙先划甲后划,谁有必胜策略?必胜策略是怎样的? ⑵甲先划乙后划,谁有必胜策略?必胜策略是怎样的? 【例4】 如果一个自然数的2004倍恰有2004个约数,这个自然数自己最少有多少个约数?

测试题 【例1】求所有能被30整除,且恰有30个不同约数的自然数。 【例2】在1到100中,恰好有6个约数的数有多少个? 答案: 【例1】【分析】 由于30235=??,从质数的观点看整除,如果自然数N 能被30整除,那么自然数N 至少含有三个质因数2,3,5。设:312235r r r N =???。自然数N 恰有30个不同的因数,根据约数的个数公式:12311130235r r r +?+?+?==??()()()。注意 到235??是三个约数之积,由此可知自然数N 中质因数的个数恰好有3个。因此 123111235r r r +?+?+=??()()(),由此可知123r r r (,,)必是 124(, , )的一个排列。 综上所述,所求的自然数有:24235??,42235??,24235??,42235??,42235??,24235??。 【例2】【分析】 6只能表示为()51+或()()1121++,所以恰好有6个约数的数要么能表示成某个质数的5次方,要么表示为某个质数的平方再乘以另一个质数,100以内符合前者的只有32,符合后者的数枚举如下: 222222222222222232527211213217219223 8323537311 45253 2721???????????????种种种种 所以符合条件的自然数一共有1842116++++=(种)。

c算法大全

一、数论算法 1.求两数的最大公约数 function gcd(a,b:integer):intege r; begin if b=0 then gcd:=a else gcd:=gcd (b,a mod b); end ; 2.求两数的最小公倍数 function lcm(a,b:intege r):integer; begin if a0 do inc(lcm,a); end; 3.素数的求法 A.小范围内判断一个数是否为质数:function prime (n: intege r): Boolean; v ar I: integer; begin for I:=2 to trunc(sqrt(n)) do if n mod I=0 then begin prime:=false; exit;

end; prime:=true; end; B.判断longint范围内的数是否为素数(包含求50000以内的素数表):procedure getprime; v ar i,j:longint; p:array[1..50000] of boolean; begin fillchar(p,sizeof(p),true); p[1]:=false; i:=2; w hile i<50000 do begin if p[i] then begin j:=i*2; w hile j<50000 do begin p[j]:=false; inc(j,i); end; end; inc(i); end; l:=0; for i:=1 to 50000 do

七年级数学竞赛讲座数论的方法与技巧(含答案详解)

数学竞赛讲座 数论的方法技巧(上) 数论是研究整数性质的一个数学分支,它历史悠久,而且有着强大的生命力。数论问题叙述简明,“很多数论问题可以从经验中归纳出来,并且仅用三言两语就能向一个行外人解释清楚,但要证明它却远非易事”。因而有人说:“用以发现天才,在初等数学中再也没有比数论更好的课程了。任何学生,如能把当今任何一本数论教材中的习题做出,就应当受到鼓励,并劝他将来从事数学方面的工作。”所以在国内外各级各类的数学竞赛中,数论问题总是占有相当大的比重。 小学数学竞赛中的数论问题,常常涉及整数的整除性、带余除法、奇数与偶数、质数与合数、约数与倍数、整数的分解与分拆。主要的结论有: 1.带余除法:若a,b是两个整数,b>0,则存在两个整数q,r,使得abq+r(0≤r

4.约数个数定理:设n的标准分解式为(1),则它的正约数个数为: d(n)(a1+1)(a2+1)…(ak+1)。 5.整数集的离散性:n与n+1之间不再有其他整数。因此,不等式x

数论算法讲义 3章(同余方程)

第 3 章 同余方程 (一) 内容: ● 同余方程概念 ● 解同余方程 ● 解同余方程组 (二) 重点 ● 解同余方程 (三) 应用 ● 密码学,公钥密码学 3.1 基本概念及一次同余方程 (一) 同余方程 (1) 同余方程 【定义3.1.1】(定义1)设m 是一个正整数,f(x)为n 次多项式 ()0111a x a x a x a x f n n n n ++++=--Λ 其中i a 是正整数(n a ≠0(mod m )),则 f (x)≡0(mod m ) (1) 叫做模m 的(n 次)同余式(或模m 的(n 次)同余方程),n 叫做f(x)的次数,记为deg f 。 (2) 同余方程的解 若整数a 使得 f (a)≡0(mod m )成立,则a 叫做该同余方程的解。 (3) 同余方程的解数 若a 是同余方程(1)的解,则满足x ≡a (mod m )的所有整数都是方程(1)的解。即剩余类

a C ={x |x ∈Z ,x ≡a (mod m )} 中的每个剩余都是解。故把这些解都看做是相同的,并说剩余类a C 是同余方程(1)的一个解,这个解通常记为 x ≡a (mod m ) 当21,c c 均为同余方程(1)的解,且对模m 不同余时,就称它们是同余方程(2)的不同的解,所有对模m 的两两不同余的解的个数,称为是同余方程(1)的解数,记作()m f T ;。显然 ()m f T ;≤m (4) 同余方程的解法一:穷举法 任意选定模m 的一组完全剩余系,并以其中的每个剩余代入方程(1),在这完全剩余系中解的个数就是解数()m f T ;。 【例1】(例1)可以验证,x ≡2,4(mod 7)是同余方程 15++x x ≡0(mod 7) 的不同的解,故该方程的解数为2。 50+0+1=1≡3 mod 7 51+1+1=3≡3 mod 7 52+2+1=35≡0 mod 7 53+3+1=247≡2 mod 7 54+4+1=1029≡0 mod 7 55+5+1=3131≡2 mod 7 56+6+1=7783≡6 mod 7 【例2】求同余方程122742 -+x x ≡0(mod 15)的解。 (解)取模15的绝对最小完全剩余系:-7,-6,…,-1,0,1,2,…,7,直接计算知x =-6,3是解。所以,该同余方程的解是 x ≡-6,3(mod 15)

六年级奥数-第十讲.数论之余数问题.教师版

第十讲:数论之余数问题 余数问题是数论知识板块中另一个内容丰富,题目难度较大的知识体系,也是各大杯赛小升初考试必考的奥数知识点,所以学好本讲对于学生来说非常重要。 许多孩子都接触过余数的有关问题,并有不少孩子说“遇到余数的问题就基本晕菜了!” 余数问题主要包括了带余除法的定义,三大余数定理(加法余数定理,乘法余数定理,和同余定理),及中国剩余定理和有关弃九法原理的应用。 知识点拨: 一、带余除法的定义及性质: 一般地,如果a是整数,b是整数(b≠0),若有a÷b=q……r,也就是a=b×q+r, 0≤r<b;我们称上面的除法算式为一个带余除法算式。这里: r=时:我们称a可以被b整除,q称为a除以b的商或完全商 (1)当0 r≠时:我们称a不可以被b整除,q称为a除以b的商或不完全商 (2)当0 一个完美的带余除法讲解模型: 如图,这是一堆书,共有a本,这个a就可以理解为被除数,现在 要求按照b本一捆打包,那么b就是除数的角色,经过打包后共打包了 c捆,那么这个c就是商,最后还剩余d本,这个d就是余数。 这个图能够让学生清晰的明白带余除法算式中4个量的关系。并且 可以看出余数一定要比除数小。 二、三大余数定理: 1.余数的加法定理 a与b的和除以c的余数,等于a,b分别除以c的余数之和,或这个和除以c的余数。 例如:23,16除以5的余数分别是3和1,所以23+16=39除以5的余数等 于4,即两个余数的和3+1. 当余数的和比除数大时,所求的余数等于余数之和再除以c的余数。 例如:23,19除以5的余数分别是3和4,故23+19=42除以5的余数等于3+4=7除以5的余数,即2. 2.余数的乘法定理 a与b的乘积除以c的余数,等于a,b分别除以c的余数的积,或者这个积除以c所得的余数。 例如:23,16除以5的余数分别是3和1,所以23×16除以5的余数等于3×1=3。 当余数的和比除数大时,所求的余数等于余数之积再除以c的余数。 例如:23,19除以5的余数分别是3和4,所以23×19除以5的余数等于3×4除以5的余数,即2. 3.同余定理

初中奥数:数论问题位值原理的解题技巧

初中奥数:数论问题位值原理的解题技巧 1、一个两位数,其十位与个位上的数字交换以后,所得的两位数 比原来小27,则满足条件的两位数共有______个. 【解析】:11+12+13+14+15+16+17=98.若中心圈内的数用a表示,因三条线的总和中每个数字出现一次,只有a多用3两次,所以98+2a 应是3的倍数,a=11,12,…,17代到98+2a中去试,得到a=11,14,17时,98+2a是3的倍数. (1)当a=11时98+2a=120,120÷3=40 (2)当a=14时98+2a=126,126÷3=42 (3)当a=17时98+2a=132,132÷3=44 相对应的解见上图. 2、一个三位数,它等于抹去它的首位数字之后剩下的两位数的4倍于25之差,求这个数。 解答:设它百位数字为a,十位数字为b,个位数字为c 则100a+10b+c=4(10b+c) 化简得5(20a-6b+5)=3c 因为c为正整数,所以20a-6b+5是3的倍数 又因为0≤c≤9 所以0≤3c/5≤5.4 所以0≤20a-6b+5=3c/5≤5.4 所以3c/5=3 即c=5

所以20-6b+5=3 化简得3b-1=10a 按照同样的分析方法,3b-1是10的倍数,解得b=7 最后再算出10a=3*7-1=20 则a=2 所以答案为275。 3、a、b、c是1——9中的三个不同数码,用它们组成的六个没有重复数字的三位数之和是(a+b+c)的多少倍? 解答:组成六个数之和为: 10a+b+10a+c+10b+a+10b+c+10c+a+10c+b =22a+22b+22c =22(a+b+c) 很显然,是22倍 4、有2个3位数,它们的和是999,如果把较大的数放在较小数的左边,所成的数正好等于把较小数放在较大数左边所成数的6倍,那么这2数相差多少呢? 解答:abc+def=999,abcdef=6defabc,根据位值原 理,1000abc+def=6000def+6abc 化简得994abc=5999def,两边同时除以7得142abc=857def,所以abc=857,def=142 所以857-142=715 5、将一个三位数的数字重新排列,在所得到的三位数中,用的减去最小的,正好等于原来的三位数,求原来的三位数。

费马小定理数论的证明方法

费马小定理数论的证明方法 2007年12月28日星期五 01:29 P.M. 费马小定理数论的证明方法 Mod的简单介绍 (Congruence) a=b(mod m) a和b除以m以后有相同的余数 不失一般性地另a>b 则a=km+b比如7=1 mod 2 9=4 mod 5 简单的Congruence 计算 如果a=b mod m c=d mod m 则a=km+b c=tm+d 直接可推出 a+b=c+d (mod m) a-b=c-d (mod m) ab=cd (mod m) 并且可得存在正整数c 使得ac=bc (mod mc) 当然ac=bc(mod m) 费马小定理如果a,p互质且q是质数则a^(p-1)=1 (mod p) 考虑数列An= a,2a,3a,4a…… (p-1)a 假设An中有2项ma, na 被p除以后的余数是相同的.那么必然有ma=na (mod p) 即a(m-n)=0(mod p) 由于a和p互质,所以m-n=0(mod p) 但是m,n属于集合{1,2,3..p-1} 且m不等于n,所以m-n不可能是p的倍数.和假设产生矛盾所以An中任意2项被p除 得到的余数都是不同的, 并且对于任一个整数被p除以后的余数最多有p-1个,分别是 1,2,3,….p-1 而数列An中恰好有p-1个数,所以数列中的数被p除以后的余数一定正好包含所有的1,2,3,4,5…. p-1 由此我们可以用Congruence的乘法性质, a*2a*3a*…(p-1)a=1*2*3*4..*(p-1) (mod p) 对两边进行化简,即可以得到a^(p-1)=1 (mod p) Euler’s Totient function 定义o(n)是所有比n小且和n互质的数的总数(包括1) 例如o(5)=4 o(10)=8 我们发现引入这个以后费马小定理可以改写为a^o(p)=1 (mod p) 事实上,这个结论对所有的正整数n都成立即a^o(n)=1 (mod n)

(完整版)小学奥数中的数论问题

小学奥数中的数论问题 在奥数竞赛中有一类题目叫做数论题,这一部分的题目具有抽象,思维难度大,综合运用知识点多的特点,基本上出现数论题目的时候大部分同学做得都不好。 一、小学数论究包括的主要内容 我们小学所学习到的数论内容主要包含以下几类: 整除问题:(1)整除的性质;(2)数的整除特征(小升初常考内容) 余数问题:(1)带余除式的运用被除数=除数×商+余数.(余数总比除数小) (2)同余的性质和运用 奇偶问题:(1)奇偶与加减运算;(2)奇偶与乘除运算质数合数:重点是质因数的分解(也称唯一分解定理)约数倍数:(1)最大公约最小公倍数两大定理 一、两个自然数分别除以它们的最大公约数,所得的商互质。 二、两个数的最大公约和最小公倍的乘积等于这两个数的乘积。 (2)约数个数决定法则(小升初常考内容) 整数及分数的分解与分拆:这一部分在难度较高竞赛中常

出现,属于较难的题型。二、数论部分在考试题型中的地位 在整个数学领域,数论被当之无愧的誉为“数学皇后”。翻开任何一本数学辅导书,数论的题型都占据了显著的位置。在小学各类数学竞赛和小升初考试中,系统研究发现,直接运用数论知识解题的题目分值大概占据整张试卷总分的30%左右,而在竞赛的决赛试题和小升初一类中学的分班测试题中,这一分值比例还将更高。 出题老师喜欢将数论题作为区分尖子生和普通学生的依据,这一部分学习的好坏将直接决定你是否可以在选拔考试中拿到满意的分数。三、孩子在学习数论部分常常会遇到的问题 数学课本上的数论简单,竞赛和小升初考试的数论不简单。 有些孩子错误地认为数论的题目很简单,因为他们习惯了数学课本上的简单数论题,比如:例1:求36有多少个约数? 这道题就经常在孩子们平时的作业里和单元测试里出现。可是小升初考题里则是:例2:求3600有多少个约数? 很多孩子就懵了,因为“平时考试里没有出过这么大的数!”(孩子语)于是乎也硬着头皮用课堂上求约数的方法去求,白白浪费了大把的时间,即使最后求出结果也并不划

数论班100题手册

数论短期班100题手册 知识框架体系 一、奇偶性质 1.奇数和偶数的表示方法: 因为偶数是2的倍数,所以通常用2k这个式子来表示偶数(这里k是整数); 因为任何奇数除以2其余数总是1,所以通常用式子21 k+来表示奇数(这里k是整数).特别注意,因为0能被2整除,所以0是偶数.最小的奇数是1,最小的偶数是0. 2.奇数与偶数的运算性质: 性质一:偶数+偶数=偶数(偶数-偶数=偶数) 奇数+奇数=偶数(奇数-奇数=偶数) 偶数+奇数=奇数(偶数-奇数=奇数) 可以看出:一个数加上(或减去)偶数,不改变这个数的奇偶性; 一个数加上(或减去)奇数,它的奇偶性会发生变化. (也可以这样记:奇偶性相同的数加减得偶数,奇偶性不同的数加减得奇数.) 性质二:偶数?奇数=偶数(推广开来还可以得到:偶数个奇数相加得偶数) 偶数?偶数=偶数(推广开就是:偶数个偶数相加得偶数) 奇数?奇数=奇数(推广开就是:奇数个奇数相加得奇数) 可以看出:一个数乘以偶数时,乘积必为偶数;几个数的积为奇数时,每个乘数都是奇数.(也可以这样简记:对于乘法,见偶(数)就得偶(数)). 性质三:任何一个奇数一定不等于任何一个偶数. 二、整除 1.整除的定义 所谓“一个自然数a能被另一个自然数b整除”就是说“商a b 是一个整数”;或者换句话说: 存在着第三个自然数c,使得a b c =?.这是我们就说“b整除a”或者“a被b整除”,其中b 叫a的约数,a是b的倍数,记作:“|b a”. 2.整除性质: ⑴传递性若|c b,|b a,则|c a. ⑵可加性若|c a,|c b,则|c a b ± (). ⑶可乘性若|c a,|d b,则| cd ab. 3.整除的特征 ⑴4,25,8,125,16,625的整除特征 能否被4和25整除是看末两位;能否被8和125整除是看末三位;能否被16和625整除是看末四位(100425 =?,10008125 =?,1000016625 =?,100000323125 =?) ⑵3,9的整除特征 能否被9整除是看数字之和是否是9的倍数,并且这个数除以9的余数和这个数数字之和除以9的余数相同,因此判断一个数除以九余几就可以先把和是9的倍数的数划掉,剩下的数是几就代表

《数论算法》教案5章(二次同余方程与平方剩余)

第5章 二次同余方程与平方剩余 内容 1. 二次同余方程,平方剩余 2. 模为奇素数的平方剩余 3. 勒让德符号、雅可比符号 4. 二次同余方程的求解 要点 二次同余方程有解的判断与求解 5.1 一般二次同余方程 (一) 二次同余方程 2ax +bx +c ≡0(mod m ),(a 0(mod m ))(1) (二) 化简 设m =k k p p p αααΛ2 121,则方程(1)等价于同余方程组 ??? ????≡++≡++≡++) () ()(k k p c bx ax p c bx ax p c bx ax αααmod 0mod 0mod 0222 1221Λ Λ ?2ax +bx +c ≡0(mod αp ), (p a ) (2) (三) 化为标准形式 p ≠2,方程(2)两边同乘以4a , 422x a +4abx +4ac ≡0(mod αp ) ()22b ax +≡2b -4ac (mod αp ) 变量代换, y =2ax +b (3) 有

2y ≡2b -4ac (mod αp ) (4) 当p 为奇素数时,方程(4)与(2)等价。即 ● 两者同时有解或无解;有解时,对(4)的每个解 ()p y y mod 0≡, 通过式(3)(x 的一次同余方程,且(p , 2a )=1,所以解数为1)给出(2)的一个解()p x x mod 0≡,由(4)的不同的解给出(2)的不同的解;反之亦然。 ● 两者解数相同。 结论:只须讨论方程2x ≡a (mod αp ) (5) 【例5.1.1】化简方程7x 2+5x -2≡0(mod 9)为标准形式。 (解)方程两边同乘以4a =4×7=28,得 196x 2+140x -56≡0(mod 9) 配方 (14x +5) 2-25-56≡0(mod 9) 移项 (14x +5) 2≡81(mod 9) 变量代换y =14x +5 得 y 2≡0(mod 9) (解之得y =0, ±3,从而原方程的解为 x ≡114-(y -5)≡15- (y -5) ≡2(y -5)≡2y -10≡2y -1 ≡-7, -1, 5≡-4, -1, 2(mod 9)) (四) 平方剩余 【定义5.1.1】设m 是正整数,a 是整数,m a 。若同余方程 2x ≡a (mod m ) (6) 有解,则称a 是模m 的平方剩余(或二次剩余);若无解,则称a 是模m 的平方非剩余(或二次非剩余)。

数论的方法和技巧05整数的p进位制及其应用

整数的p 进位制及其应用 基础知识 给定一个m 位的正整数A ,其各位上的数字分别记为021,,,a a a m m ,则此数可以简记为:021a a a A m m (其中01 m a )。 由于我们所研究的整数通常是十进制的,因此A 可以表示成10的1 m 次多项 式 , 即 12211101010a a a a A m m m m ,其中 1,,2,1},9,,2,1,0{ m i a i 且01 m a ,像这种10的多项式表示的数常常简 记为10021)(a a a A m m 。在我们的日常生活中,通常将下标10省略不写,并且连括号也不用,记作021a a a A m m ,以后我们所讲述的数字,若没有指明记数式的基,我们都认为它是十进制的数字。为了具备一般性,我们给出正整数A 的p 进制表示: 012211a p a p a p a A m m m m ,其中1,,2,1},1,,2,1,0{ m i p a i 且 01 m a 。而m 仍然为十进制数字,简记为p m m a a a A )(021 。 典例分析 例1.(2007年中国数学奥林匹克协作体竞赛试题)假定正整数N 的8进制表示为 8)43211234567765( N ,那么下面四个判断中,正确的是( ) A 、N 能被7整除而不能被9整除 B 、N 能被9整除而不能被7整除 C 、N 不能被7整除也不能被9整除 D 、N 既能被7整除也能被9整除 答 D 由于)7(mod 18 ,所以)7(m od 18 i k i k i i i i k k a a a a a a N 0 8011)7(mod 8 即N 能被7整除 N 的8进制表示下各位数字之和能被7整除。 类似的,N 能被9整除 N 的8进制表示下奇数位数字之和与偶数位数字之和的差能被9整除

初一数学竞赛培训讲座 数论的方法技巧(上)

初一数学竞赛培训讲座数论的方法技巧(上) 数论是研究整数性质的一个数学分支,它历史悠久,而且有着强大的生命力.数论问题叙述简明,“很多数论问题可以从经验中归纳出来,并且仅用三言两语就能向一个行外人解释清楚,但要证明它却远非易事”.因而有人说:“用以发现天才,在初等数学中再也没有比数论更好的课程了.任何学生,如能把当今任何一本数论教材中的习题做出,就应当受到鼓励,并劝他将来从事数学方面的工作.”所以在国内外各级各类的数学竞赛中,数论问题总是占有相当大的 比重. 小学数学竞赛中的数论问题,常常涉及整数的整除性、带余除法、奇数与偶数、质数与合数、约数与倍数、整数的分解与分拆.主要的结论有: 1.带余除法:若a,b是两个整数,b>0,则存在两个整数q,r,使得a=bq+r(0≤r<b),且q,r 是唯一的.特别地,如果r=0,那么a=bq.这时,a被b整除,记作b|a,也称b是a的约数,a是b的倍数. 2.若a|c,b|c,且a,b互质,则ab|c. 3.唯一分解定理:每一个大于1的自然数N都可以写成质数的连乘积, 即 (1,其中p1<p2<…<p k为质数,a1,a2,…,a k为自然数,并且这种表示是唯一的.(1)式称为N的质因数分解或标准分解. 4.约数个数定理:设n的标准分解式为(1),则它的正约数个数为: d(n)=(a1+1)(a2+1)…(a k+1). 5.整数集的离散性:n与n+1之间不再有其他整数.因此,不等式x<y与x≤y-1是等价的. 下面,我们将按解数论题的方法技巧来分类讲解. 一、利用整数的各种表示法 对于某些研究整数本身的特性的问题,若能合理地选择整数的表示形式,则常常有助于问题的解决.这些常用的形式有: 1.十进制表示形式:n=a n10n +a n-110 n-1 +…+a0;

数论入门

欧几里得算法 欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a,d|b,而r = a - kb,因此d|r 因此d也是(b,a mod b)的公约数 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证欧几里得算法模板 int gcd(int n,int m) { int t,r; if(n0) { n=m; m=r; } return m; } 题目:HDU 1108 HDU 1576 扩展欧几里得 定理 对于不完全为0 的非负整数a,b,gcd(a,b)表示a,b 的最大公约数,必然存在整 数对x,y ,使得gcd(a,b)=ax+by。 求解x,y的方法的理解 设a>b。 1,显然当b=0,gcd(a,b)=a。此时x=1,y=0; 2,ab!=0 时 设ax1+by1=gcd(a,b); bx2+(a mod b)y2=gcd(b,a mod b); 根据朴素的欧几里德原理有gcd(a,b)=gcd(b,a mod b); 则:ax1+by1=bx2+(a mod b)y2; 即:ax1+by1=bx2+(a-[a/b]*b)y2=ay2+bx2-(a/b)*by2; 根据恒等定理得:x1=y2; y1=x2-[a/b]*y2; 这样我们就得到了求解x1,y1 的方法:x1,y1 的值基于x2,y2. 上面的思想是以递归定义的,因为gcd 不断的递归求解一定会有个时候b=0,所以递归可以

10数论问题的常用方法(教师版)

数论问题的常用方法 数论是研究数的性质的一门科学,它与中学数学教育有密切的联系。数论问题解法灵活,题型丰富,它是中学数学竞赛试题的源泉之一。下面介绍数论试题的常用方法. 1.基本原理 为了使用方便,我们将数论中的一些概念和结论摘录如下: 我们用),...,,(21n a a a 表示n 个整数1a ,2a ,…,n a 的最大公约数。用[1a ,2a ,…,n a ]表示 1a ,2a ,…,n a 的最小公倍数。对于实数x ,用[x ]表示不超过x 的最大整数,用{x }=x -[x ] 表示x 的小数部分。对于整数b a ,,若)(|b a m -,,1≥m 则称b a ,关于模m 同余,记为 )(mod m b a ≡。对于正整数m ,用)(m ?表示{1,2,…,m }中与m 互质的整数的个数, 并称)(m ?为欧拉函数。对于正整数m ,若整数m r r r ,...,,21中任何两个数对模m 均不同余,则称{m r r r ,...,,21}为模m 的一个完全剩余系;若整数)(21,...,,m r r r ?中每一个数都与m 互质,且其中任何两个数关于模m 不同余,则称{)(21,...,,m r r r ?}为模m 的简化剩余系。 定理1 设b a ,的最大公约数为d ,则存在整数y x ,,使得 yb xa d +=. 定理2 (1)若)(mod m b a i i ≡,1=i ,2,…,n ,)(mod 21m x x =,则 1 1n i i i a x =∑≡2 1 n i i i b x =∑; (2)若)(mod m b a ≡,),(b a d =,m d |,则 )(mod d m d b d a ≡; (3)若)(mod m b a ≡,),(b a d =,且1),(=m d ,则)(mod m d b d a ≡; (4)若b a ≡(i m mod ),n i ,...,2,1=,M=[n m m m ,...,,21],则b a ≡(M mod ). 定理3 (1)1][][1+<≤<-x x x x ; (2)][][][y x y x +≥+; (3)设p 为素数,则在!n 质因数分解中,p 的指数为 ∑ ≥1 k k p n .

数论算法ch31

数论算法
Number-Theoretic Algorithms Number-Theoretic
主讲人 徐云
Fall 2010, USTC

数论算法(Ch31)
1 初等数论记号(31.1) 2 最大公约数(31.2) 3 模运算(31.3) 4 求解线性模方程(31.4) 5 中国余数定理(31.5) 6 RSA公钥密码系统(31.7) 7 素数判定(31.8)

初等数论记号(31.1)
算术计算中的输入规模和成本 除定理 公约数和最大公约数 互素数和最大公约数

算术计算中的输入规模和成本
Def.1 一个输入整数a1,a2,…,ak的算法是多项式时间算法,如果其 运行时间是以loga1,loga2,…,logak为多项式时间的,即以输入 参数二进制编码长度的多项式时间的。 如,两个β位的整数乘法,普通乘法使用θ(β2), 改进的算法使用θ(βlog3),甚至θ(βlogβloglogβ)
2010-11-1
4

除定理
概念:可除性,素数,合数 Th31.1 对任何整数a和正整数n,存在唯一整数q和r,使得 a=qn+r,这里q= ?a/n? ,0≤ r<n。 注: q为商,r为余数 Def. 2 模n的等价类: [a]n={ a+kn | k∈Z} - 性质: 如果a∈[b]n,则a≡b ( mod n)
2010-11-1 5

除定理
Spiral Visualization of mod: Example shown: modulo-5 arithmetic
≡0 (mod 5) 20
15 10 5 4 3 8 13 18 0 1 2 7 12 17 22 ≡ 2 6 11 16
≡ 4 19 (mod 5) 14 9
≡1 (mod 5)
21
≡3 (mod 5)
(mod 5)
2010-11-1
6

几个精彩的数论问题

几个精彩的数论问题 从同事那里借来了一本单墫教授?主编的《初等数论》奥数书,看到很多精彩的问题,在这里做个笔记,与大家一同分享。不少问题和答案都有过重新叙述,个别问题有所改动。 问题:找出所有使得 2n - 1 能被 7 整除的正整数 n 。 答案:由于 2n的二进制表达为1000…00 (n 个 0),因此 2n - 1 的二进制表达为111…11 (n 个 1)。而 7 的二进制表达是 111 ,要想让它整除 n 个1 ,显然 n 必须是也只能是 3 的倍数。 问题:是否存在 100 个数,使得它们的和等于它们的最小公倍数? 答案:是的。考虑3, 2 × 3, 2 × 32, 2 × 33, …, 2 × 398, 399,它们的和为: 3 + 2 × 3 + 2 × 32+ 2 × 33+ … + 2 × 398 + 399 = 3 × (1 + 2) + 2 × 32+ 2 × 33+ … + 2 × 398 + 399 = 32+ 2 × 32+ 2 × 33+ … + 2 × 398 + 399 = 32× (1 + 2) + 2 × 33+ … + 2 × 398 + 399 = 33+ 2 × 33+ … + 2 × 398 + 399 = ... ... = 399 + 399 = 2 × 399 而这 100 个数的最小公倍数正是 2 × 399。 问题:能否找出 100 个不同的正整数,使得其中任意 2 ≤ k ≤ 100 个数的算术平均数都恰为整数。 答案:能。这个问题非常唬人,它的答案异常简单: 1 · 100!, 2 · 100!, 3 · 100!, …, 100 · 100! 显然满足要求。 问题:求证,存在任意长的连续正整数,使得其中任何一个数都不是质数的幂(当然更不能是质数)。

《数论算法》教案5章

第 5 章 原根与离散对数 5.1 阶及其基本性质 准备知识: (1) 欧拉定理:m >1,(a,m)=1,则 ()m a ?≡1(mod m ) (2) 问题: ①()m ?是否是使得上式成立的最小正整数? ②该最小正整数有何性质? (一) 阶和原根概念 【定义5.1.1】设m >1,(a,m)=1,则使得 e a ≡1(mod m ) 成立的最小正整数e 叫做a 对模m 的阶(或指数),记作 m ord (a)。若a 的阶e =()m ?,则a 叫做模m 的原根。 (二) 应用:Diffie —Hellman 密钥交换算法 公钥算法的核心: (1) 仅依赖公开信息不足以对算法构成威胁;

(2) 掌握私钥者可轻易获得信内容。 全局公开量 q 素数 α q 的原根(α<q ) 交换公开密钥 A → B : A Y B →A : B Y 说明:K ≡()A X B Y ≡() B X A Y ≡B A X X α(mod q ) 例: ● 素数q =353,原根α=3 ● A 选A X =97, 计算A Y ≡973≡40 mod 353 ● B 选B X =233, 计算B Y ≡2333≡248 mod 353 ● A 与B 交换 ● A 计算密钥 K ≡97248≡160 mod 353 ● B 计算密钥 K ≡23340≡160 mod 353

(三) 用定义求阶和原根 【例1】(按定义求阶和原根)m=7,则?(7)=6。且 1 1≡1,32≡1,63≡1,34≡1,65≡1,26≡1(mod 7)故对模数7而言,1,2,3,4,5,6的阶分别为1,3,6,3,6,2。列表表示为 因此,3, 【例2】(快速求阶)m=14=2·7,?(14)=6,则 1 1≡1,33≡-1,35≡-1,39≡1, 3 13≡1(mod 7) 11≡1,2 列表 故3,5是模14的原根。 【例3】(无原根的整数)m=15=3·5,?(15)=8,则 故模数15没有原根。 同理,可知模数m=9时,其原根为2,5;而整数8则没有

排列组合问题常用的解题方法含答案

高中数学排列组合问题常用的解题方法 一、相邻问题捆绑法 题目中规定相邻的几个元素并为一个组(当作一个元素)参与排列. 例1:五人并排站成一排,如果甲、乙必须相邻且乙在甲的右边,那么不同的 排法种数有种。 二、相离问题插空法 元素相离(即不相邻)问题,可先把无位置要求的几个元素全排列,再把规定相 离的几个元素插入上述几个元素间的空位和两端. 例2:七个人并排站成一行,如果甲乙两个必须不相邻,那么不同排法的种数是。 三、定序问题缩倍法 在排列问题中限制某几个元素必须保持一定顺序,可用缩小倍数的方法. 例3:A、B、C、D、E五个人并排站成一排,如果 B必须站A的右边(A、B可 不相邻),那么不同的排法种数有。 四、标号排位问题分步法 把元素排到指定号码的位置上,可先把某个元素按规定排入,第二步再排另一 个元素,如此继续下去,依次即可完成. 例4:将数字1、2、3、4填入标号为1、2、3、4的四个方格里,每格填一个数,则每个方格的标号与所填数字均不相同的填法有。 五、有序分配问题逐分法 有序分配问题是指把元素按要求分成若干组,可用逐步下量分组法。 例5:有甲、乙、丙三项任务,甲需2人承担,乙丙各需1人承担,从10人 中选出4人承担这三项任务,不同的选法总数有。 六、多元问题分类法 元素多,取出的情况也有多种,可按结果要求,分成不相容的几类情况分别计算,最后总计。 例6:由数字 0,1,2,3,4,5组成且没有重复数字的六位数,其中个位数 字小于十位数字的共有个。 例7:从1,2,3,…100这100个数中,任取两个数,使它们的乘积能被7 整除,这两个数的取法(不计顺序)共有多少种? 例8:从1,2,…100这100个数中,任取两个数,使其和能被4整除的取法(不计顺序)有多少种? 七、交叉问题集合法 某些排列组合问题几部分之间有交集,可用集合中求元素个数公式 n A B n A n B n A B ?=+-?。 ()()()() 例 9:从6名运动员中选出4个参加4×100m接力赛,如果甲不跑第一棒,乙 不跑第四棒,共有多少种不同参赛方法? 八、定位问题优先法 某个(或几个)元素要排在指定位置,可先排这个(几个)元素,再排其他元素。 例10:1名老师和4名获奖同学排成一排照像留念,若老师不在两端,则有不

相关文档
最新文档