C++第五次试验报告_数论算法

C++第五次试验报告_数论算法
C++第五次试验报告_数论算法

C++第五次试验报告

姓名:刘俊

学号:091201231

一.试验名称:

数论算法初步

二.试验目的:

1.熟悉vc;

2.掌握数论的初步算法;

三.试验内容:

配套实验a:

编写一个程序,求出整数11129987625428872488742229

的1000进制形式,并且判断是否可以被7整除配套实验b:编写程序实现辗转相除法

配套实验c:编写程序实现stein算法

配套实验d:编写程序,实现扩展的辗转相除法

四:试验代码:

试验a:

#include

using namespace std;

#define MAX 100

int main()

{

int a[MAX] = {0};

int i = 0;

int s = 0,t = 0;

int r;

unsigned long int n;

cout<<"请输入n值"<

cin>>n;

do

{

a[i] = n % 1000;

n = n / 1000;

i++;

}

while(n > 0);

i = 0;

while(a[i] != 0)

{

if( i % 2 == 0)

s += a[i];

if( i % 2 == 1)

t += a[i];

i++;

}

r = s - t;

if(r % 7 ==0)

cout<<"此数能被7整除"<

else

cout<<"此数能不被7整除"<

system("pause");

return 0;

}

试验b:

#include

#include

using namespace std;

int gcd(int a,int b)

{

int r;

do

{

r = a % b;

a = b;

b = r;

}

while(r > 0);

return a;

}

int main()

{

int a,b,temp;

cout<<"请输入a值"<

cin>>a;

cout<<"请输入b值"<

cin>>b;

if(a < b)

{

temp = b;

b = a;

a = temp;

}

cout<<"最小公约数:"<

system("pause");

return 0;

}

试验c:

#include

#include

#include

using namespace std;

int main()

{

unsigned int a,b,temp;

int c = 2;

int p = 0;

cout<<"请输入a值"<

cin>>a;

cout<<"请输入b值"<

cin>>b;

if(a < b)

{

temp = b;

b = a;

a = temp;

}

while(b != 0)

{

while( (a & 1) == 0 && (b & 1) == 0)

{

a = a >> 1;

b = b >> 1;

p++;

}

while( (a & 1) == 0 && (b & 1) == 1)

{

a = a >> 1;

}

while( (a & 1) == 1 && (b & 1) == 0)

{

b = b >> 1;

}

while( (a & 1) == 1 && (b & 1) == 1)

{

temp = a;

a = b;

b = fabs(temp - b);

}

}

cout<<"最小公约数:"<

return 0;

}

试验d:

#include

#include

using namespace std;

int main()

{

int a,b,r,d,s,t,x1 = 1,x2 = 0,y1 = 0,y2 = 1,temp,a1,b1;

int q;

cout<<"请输入a值"<

cin>>a;

cout<<"请输入b值"<

cin>>b;

if(a < b)

{

temp = b;

b = a;

a = temp;

}

a1 = a;

b1 = b;

r = a % b;

while(r >0)

{

q = (a - r) / b;

a = b;

b = r;

temp = x2;

x2 = x1 - q * x2;

x1 = temp;

temp = y2;

y2 = y1 - q * y2;

y1 = temp;

r = a % b;

}

d = b;

s = x2;

t = y2;

cout<<"最小公约数为:"<

cout<<"d = "<

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];

C语言程序设计实验报告参考答案

长沙理工大学C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述四、程序清单 1.编写程序实现在屏幕上显示以下结果: Thedressislong Theshoesarebig Thetrousersareblack 答案: #include main() { printf("Thedressislong\n"); printf("Theshoesarebig\n"); printf("Thetrousersareblack\n"); } 2.改错题(将正确程序写在指定位置) 正确的程序为: #include main() {

printf("商品名称价格\n"); printf("TCL电视机¥7600\n"); printf("美的空调¥2000\n"); printf("SunRose键盘¥50.5\n"); } 2.编写程序:a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 答案: #include main() { inta,b,c,x,y; a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x);

printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } 4.设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将a赋给c。(提示:用条件运算符) 答案: #include main() { inta,b,c; a=0; b=-10; c=(a>b)?b:a; printf("c=%d\n",c); }

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

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

数论中的基础概念

1群、环、域概念 A1:加法的封闭性:如果a 和b 属于G ,则a+b也属于G A2:加法结合律:对G 中的任意元素a,b,c,a+(b+c)=(a +b)+c A3:加法单位元:G 中存在一个元素0,使得对于G 中的任意元素a,有a+0=0+a A4:加法逆元:对于G中的任意元素a ,G 中一定存在一个元素a,使得 ? a+(-a)=(-a)+a =0 A5:加法交换律:对于G中的任意元素a 和b ,有a+b=b+a M1:乘法的封闭性:如果a 和b 属于G,则ab也属于G M2:乘法结合律:对于G 中的任意元素a,b,c有a(bc)=(ab )c M3:乘法分配了:对于G中的任意元素a,b,c,有a(b +c)=ab+ac 和(a +b)c=ac+bc M4:乘法交换律:对于G 中的任意元素a ,b 有a b=ba M5:乘法单位元:对于G 中的任意元素a,在G中存在一个元素1,使得a1=1a =a M6:无零因子:对于G 中的元素a,b,若ab=0,则必有a=0或b=0 M7:乘法逆元:如果a 属于G ,且a 不为0,则G 中存在一个元素1-a ,使得 111==--a a aa 满足A1---A 4称为群 满足A1---A5称为可交换群 满足A1---M 3称为环 满足A1---M 4称为可交换换 满足A 1---M6称为整环 满足A1---M 7称为域 2循环群:如果群中的每一个元素都是一个固定元素)(G a a ∈的幂k a (k 为整数), 则称群G 是循环群。我们认为元素a 生成了群G ,或者说a是群G 的 生成元。 循环群总是交换群 3模运算 )mod ()mod (n b n a =则称整数a和b 是模n 同余的,可以表示为:)(mod n b a ≡ 若b 整除a。则用符号:a |b 表示。其性质可表示如下: ①如果a|1,那么a=-1或1。 ②如果a|b,且b|a ,那么a=b 或a=-b

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

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

C语言程序设计实验报告(数组)

C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。

3算法描述流程图

4源程序 #include #include void catStr(char str1[],char str2[]) { int i,j; for (i=0;str1[i]!='\0';i++); for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j]; str1[i+j]='\0'; } lenStr(char m[] ) {int i;

for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。

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

费马小定理数论的证明方法 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)

C程序设计实验报告

实验1 C程序运行环境、数据类型、运算符和表达式 一、实验目的 1. 掌握Turbo C集成环境的进入与退出、Turbo C集成环境各种窗口的切换,了解Turbo C集成环境的设置。 2. 掌握C语言源程序的建立、编辑、修改、保存及编译和运行等操作。 3. 学会使用C语言的基本运算符(主要是算术运算符、赋值运算符)及其表达式。 4. 掌握C语言源程序的结构特点与书写规范。 二、实验要求 1. 根据题目要求,进行各种程序测试与验证,并记录结果。 2. 上机调试程序。按各个程序输入计算机,并进行编译和连接,如果在编译、连接中有错误信息,则要根 据这些信息找到程序中的错误所在,然后修改程序,直至正确。 3. 详细记录数据的输入、输出信息,按要求写出实验报告。 三、实验内容 1. 开机;进入Turbo C集成工作环境,了解Turbo C集成工作环境及其菜单的使用,输入如下C语言源程序,并以exl.C存盘。 / *ex1.c* / #include main() { printf("Hello!\n"); printf("This is C program!\n"); } 试编译、连接、运行该程序,并按Alt+F5查看运行结果。 运行结果是: 2. 输入并调试运行以下程序,查看运行结果 (由此结果可以了解到在实验用的微型机上,几种数据类型所占的字节数)。 main() { printf("char\t%d bytes\n",sizeof(char)); printf("short\t%d bytes\n",sizeof(short)); printf("int\t%d bytes\n",sizeof(int)); printf("long\t%d bytes\n",sizeof(long)); printf("float\t%d bytes\n",sizeof(float)); printf("double\t%d bytes\n",sizeof(double)); } 运行结果是: 3. 输入并调试运行以下程序。 main() {int i,j,m,n; i=8;j=10;

数论班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 的平方非剩余(或二次非剩余)。

C+程序设计实验报告-2013

C++程序设计 实验报告 专业计算机科学与技术班级 ____________ 学号 ____________ 姓名 ____________ 指导教师 __许加兵_ 信息与电子工程学院2013年9月-12月

C++程序设计实验报告 专业__________班级__________学号__________姓名__________ 成绩____________ 指导教师____________ 日期____________ 实验1 C++集成开发环境与C++函数程序设计 一、实验目的 1、了解和使用Visual Studio 2010的C++集成开发环境; 2、熟悉Visual Studio 2010环境的基本命令、功能键和常用的菜单命令; 3、学会完整的C++程序开发过程; 4、学习并掌握C++函数程序设计; 二、实验内容 1、安装、了解和使用Visual Studio 2010的C++集成开发环境; 2、通过以下的C++函数程序设计,熟悉Visual Studio 2010环境的基本命令、功能键和常用的菜单命令; 3、通过以下的C++函数程序设计,学会完整的C++程序开发过程; 4、完成以下的C++函数程序设计和调试: 1)编写一个函数print(),将一个整型向量输出到cout。此函数接受两个参数:一个字符串(用于“标记”输出)和一个向量。 2) 编写一个函数,接受一个vector 参数,返回一个vector ,其每个元素值是对应字符串的长度。此函数还找出最长和最短的字符串,以及字典序第一个和最后一个字符串。 三、简要说明C++开发环境安装和配置的过程

C程序设计上实验报告(完整版)

C语言程序设计上机实验报告 学院:机械工程学院 班级:机自161213 姓名:刘昊 学号:20162181310 实验时间:2017年3月6号 任课老师:张锐

C语言程序设计上机实验报告 实验一 一、实验名称: C程序的运行环境和运行C程序的方法 二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C 程序 三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。 四、源程序代码: 代码1: 运行结果1:

程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。 代码2: 运行结果2:

程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3: 运行结果3:

程序分析3: 使用if语句进行判断。 五.实验总结 C语言程序设计上机实验报告 实验二 一、实验名称:顺序结构程序设计 二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法, 熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。 三、实验内容: (1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。 (3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。 (4). 编写程序,实现单字符getchar和putchar输入输出。 (5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。 四、源程序代码 代码1: 运行结果1: 程序分析1:

数论入门

欧几里得算法 欧几里德算法又称辗转相除法,用于计算两个正整数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,所以递归可以

c程序设计实验报告.docx

. C++ 程序设计 实 验 报 告 : 班级: 学号: 指导教师:

. 实验一VC6.0 环境入门与简单程序设计 一、实验目的: 1、熟悉 VC++6.0 开了环境并编写简单的C++ 程序。 3、使用 C++ 语言编写简单的输入输出程序。 4、使用 VC++6.0 的 DEBUG 调试功能:单步执行、设置断点、观察变量值。 二、实验内容: 1、使用 VC++ 建立一个标准C++ 程序,编译、运行如下程序: #include Int main() { Cout<< ”Hello World!\n”; Cout<< ”Welcome to C++!\n”; } 2、编程计算图形的面积。程序可计算圆形、长方形、正方形等的面积,运行时首先提 示用户选择图形类型,然后根据不同图形类型,输入相关参数计算其面积,并将其显示出来。 #include using namespace std; void circle_area(); void rectangle_area(); void square_area(); int main()

. { int i; while(1) { cout<<" 请输入图形类型(1:圆形; 2:长方形; 3:正方形; 4:退出。): "; cin>>i; switch(i) { case 1:circle_area();break; case 2:rectangle_area();break; case 3:square_area();break; case 4:return 0; default:cout<<"输入错误!\n"; } } } void circle_area() { float r,s; cout<<" 输入圆的半径:"; cin>>r; s=3.14*r*r; cout<<" 该圆的面积是:"<>a>>b; s=a*b; cout<<" 该长方形的面积是:"<>a; s=a*a; cout<<" 该正方形的面积是:"<

数论与解析数论简史

数论与解析数论简史 王志伟200800090156 数学与应用数学 数学王子Gauss曾经说过:数学是科学的女王,而数论是数学的女王。Gauss在数学、物理、天文各方面都取得了非凡的成就,但他却始终对数论情有独钟。数论,以其纯粹的数学本质,常常被认为是最美的数学,数学的中心。 与其他数学分支,比如几何、分析不同,数论并非是源于实际需要而创立的一门学科,其起源很有可能是出自数字游戏和Pythagoras学派以数字为图腾的宗教文化。数论曾经被认为是数学家的游戏、最纯的数学学科、唯一不会有什么应用价值的分支。但是现在随着网络加密技术的发展,数论也找到了自己用武之地——密码学。前几年破解MD5码的王小云老师就是山大数论学派出身。而在其他理论中,数论也表现出了一些意想不到的价值。在量子理论中,Hermite算子是最基本的概念之一,它的思想起源就是19世纪Hermite为解决数论问题而创立的Hermite型。我们在代数中常见的理想、环等概念最开始是出自Dedekind的数论著作中。最近的一个例子,Grothendieck为解决Weil猜想而对代数几何进行了革命性的改造。此类例子还有很多,在此不一一列举。 在古代对数论贡献最大的当属古希腊人。最著名的一些成果大概就是Euclid在《几何原本》中提到的Euclid算法、素数无限多个,算数基本定理等内容,这些我们在初等数论中都可以见到。另一个对数论有重大贡献的古希腊人当属Diophantus,他探讨了很多不定方程,为纪念,我们现在就称这些方程为Diophantus方程,著名的费马大定理就是一个Diophantus 方程问题。当然,中国古代在数论方面也作出了一定的贡献:众所周知、大名鼎鼎的中国剩余定理,被数学界唯一承认的中国的定理。 在经过漫长的中世纪之后,数论进入了一个辉煌的发展时期。推动数论发展的第一个重要人物首推Fermat,一个在数论界享有崇高地位的法国律师、业余数学家。Wiles在1994年证明的Fermat's last theorem,即我们所说的费马大定理,就是Fermat所提出的一个猜想。另外,Fermat小定理,关于多角形数的猜想,Fermat数,Mersenne素数性质,Pell方程都有他的贡献,我们证明中常用的无穷递降法,就是费马在证明费马大定理在n=3时最先发明使用的,除了数论,他在其他方面也有一些突出贡献,比如解析几何、微积分。Fermat之后,另一个重要的人物是Euler,他对Fermat的一个猜想:Fermat数都是素数给出了反例,引进了在数论中一个非常重要的数论函数,即Euler函数,并发现了一个数论中非常重要的Euler 公式。另外,笔者在跟同学在参加大学生科技创新项目中研究整数分拆这个课题时,阅读了Geogre Andrew的《The theory of partitions》,有幸了解到Euler在数论中的整数分拆方面也做出了很大的贡献,提出了母函数法,利用幂级数来研究整数分拆,这导致圆法和指数和方法的产生。 。在Euler之后,两个法国人Lagrange、Legendre也在数论方面做出了重要贡献,比如我们熟悉的二次互反律,Euler和Legendre都曾提出猜想,而公式中的符号我们即称作Legendre符号。他们的贡献就不在此细述。而在数论史上做出贡献最大的,我想大多人会同意是Gauss,一个伟大的数

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

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