3.数论相关知识及基本算法.pptVIP

  • 2
  • 0
  • 约4.92千字
  • 约 22页
  • 2019-02-28 发布于北京
  • 举报
素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 素数和整除问题 * */22 * 第二课 数论相关知识及 基本算法 综合实践考核 1、基本概念和基本性质 (1)整除和约数 一个整数a能被另一个整数d整除,记作d|a。0可被每个整数整除。如果a0且d|a,则|d|=|a|。如果d|a,则称a是d的倍数。d是a的约数。一个整数a的约数最小为1,最大为|a|。每个整数a都可以被其平凡约数1和a整除。a的非平凡约数也称为a的因子。 整除有如下一些性质: 如果d|a,则对任意整数k有d|ka; 如果d|a且d|b,则d|(a±b); 如果b|a且a|b,则a=b; 如果d|a且a|c,则d|a。 具有自反、反对称和传递性,是一个偏序关系 下面举出几种特殊的整除的例子: 若2能整除a的最末位,旵2|a;若4能整除a的最后两位,则4|a;若8能整除a的最末3位,则8|a;……. 若5能整除a的最末位,则5|a;若25能整除a的最后两位,则25|a;若125能整除a的最末3位,则125|a;…….. 若3能整除a的各位数字之和,则3|a;若9能整除a的各位数字之和,则9|a; 若11能整除a的偶数数字之和与奇数数字之和的差,则11|a。 (2)素数和合数 大于1的正整数p,如果仅有的正因子是1和p,则称p为素数(prime)。大于1又不是素数的正整数称为合数(compound)。如果n为合数,那么n必有一个小于sqrt(n)的素因子。 (3)算法基本定理(惟一分解定理) 每个正整数都可以惟一地表示成素数的乘积,其中素数因子从小到大依次出现(这里的“乘积”可以有0个、1个或多个素因子)。 (4)除法的定义和同余 令a为整数,d为正整数,那么有唯一的整数q和r,其中0≤rd,使得a=dq+r。a称被除数,d称除数,q称商,r称余数。若a,b除以数c的余数相等,则称a和b关于c同余,记作a≡b(mod c)。 (5)最大公约数和最小公倍数 令a和b是不全为0的两个正整数,能使d|a和d|b的最大整数称为a和b的最大公约数,用gcd(a,b)表示。令a|d和b|d的最小正整数称为a和b的最小公倍数,用lcm(a,b)表示。有:ab=gcd(a,b)×lcm(a,b) 最大公约数有如下一些性质: 对任意整数a与b,如果d|a且d|b,则d|gcd(a,b); 对所有整数a和b以及任意负整数n,gcd(an,bn)=ngcd(a,b); 对所有正整数d,a和b,如果d|ab并且gcd(a,d)=1,则d|b; 如果q和r是a除以b的商和余数,即a=b×q+r,则gcd(a,b)=gcd(b,r)。 2、素数的判定 (1) Eraosthenes氏筛法 每次求出一个新的素数,就把n以内的所有倍数都筛去。实现时,对素数p,只需要筛去p×p,p×(p+1),…等就可以了。 #include stdio.h #include malloc.h #include math.h int main(void) { int *a,i,k,n,s; while(scanf(%d,n)==1) { if(n2) continue; a=(int *)malloc((n+1)*sizeof(int)); for(i=2;i=n;i++) //为便于操作,舍前2两个元素未用 a[i]=1; k=1; s=(int)sqrt((double)n); while(k=s) { while(a[++k]==0);//找到下一个素数 for(i=k*k;i=n;i+=k)//删除该素数的倍数 a[i]=0; } for(i=2;i=n;i++)//输出 if(a[i]==1) printf(%8d,i); printf(\n); free(a); } return 0; } 上述算法存在同一个数多次筛选的问题,那么怎样才能一个数只被筛一次呢?留为课后作业。 (2)朴素的判别法。从2开始试除小于n的所有自然数。请大家写出判别函数,并写出测试程序。 (3)注意到若a是n的因子,那么n/a也是n的因子,所以若n有一个大于1的真因子,则它必有一个不大于n1/2的因子。 (4)更进一步的,若n是合数,它必有一个素因子不大于n1/2。如果要检测一个M以内的数是否为素数,需要先

文档评论(0)

1亿VIP精品文档

相关文档