ACM_数论——南开大学 幻灯片.pptVIP

  • 2
  • 0
  • 约2.88千字
  • 约 22页
  • 2017-09-25 发布于浙江
  • 举报
ACM_数论——南开大学 幻灯片

Butterfly0923 Doraemonok jackfeng 2008年南开大学ACM协会暑期集训 数论 二分法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时间复杂度为O(logn) 二分法in乘方 第二种算法与二进制的关系 9=(1001)2, a^9=a^8*a; 10=(1010)2, a^10=a^8*a^2; 从二进制最后一位开始,如果第k位是1,就乘以a^(2^(k-1)),计算每个a^(2^k)需要logn,得到答案最多需要乘logn次,所以复杂度是O(logn) 如果把a看作矩阵,上面方法可应用于矩阵乘方 (注:这并不是最快的办法,有兴趣的同学可以做一下poj3134) 求素数方法 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,则

文档评论(0)

1亿VIP精品文档

相关文档