南开大学ACM集训-数论.pptVIP

  • 6
  • 0
  • 约3.28千字
  • 约 22页
  • 2018-06-09 发布于北京
  • 举报
南开大学ACM集训-数论.ppt

Butterfly0923 Doraemonok jackfeng 2008年南开大学ACM协会暑期集训 数论 求素数方法 1)p[N]存储所有的素数,二重循环,用已经求出的不大于平方根的所有素数试除 for(i=2;in;++i) for(j=0;jm p[j]*p[j]=n;++j) 如果p[j]整除i,则i不是素数 如果都不能整除,则i是素数,添加到素数列表p[N]; 素数 2)增加布尔型数组b[N]记录是否为素数,初始化所有值=1,从头开始遍历,如果b[i]==1,则i是素数,将所有的i的倍数j均修改为b[j]=0 for(i=2;in;++i) 如果b[i]==1则添加到素数列表p[],然后利用循环for(j=i;jn;j+=i) b[j]=0将i的所有倍数删掉 思考:试比较两种方法效率 大数的素性检测 Rabin-Miller素数测试 非素数通过测试概率为 ? Pollard-ρ算法 大数的快速分解 这两种算法在此不予以介绍,有兴趣的同学可以到google上搜索或参看相关书籍 二分法in乘方 如何计算a^n ? 1)计算a*a*a*…*a*a*a,需要计算n-1次乘法,时间复杂度O(n) 2)考虑实例a^4,计算b=a*a,再算c=b*b,则c=a^4,但是只用了两次乘法,效率提高。比如a^9=a*(a^4)*(a^4),只需用4次乘法,一般的,a^n时间复杂度

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档