算法学习之 数论

来源:互联网 发布:淘宝上的evisu旗舰店 编辑:程序博客网 时间:2024/06/09 23:38

数论

一.素数

v素数(又称质数)就是除了1和本身以外没有其他的因子的大于1的正整数.
v100以内的素数有{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97}
   1.筛选法 生成素数表 【埃拉托斯特尼筛选法】

 当需要求某一区间[2,n]内的所有素数时,可以从2开始,对于当前素数p,将p^2后所有p的倍数筛去

 每个数最多被筛去一次
 每次找到下一个没有被筛到的数就是一个素数
  时间复杂度为O(nlgn)
  2.开根判断素数法
 二.最大公约数 与 最小公倍数
gcd:greatest common divisor
lcm:lowest common multiple
1.gcd求法
  欧几里德算法 即 辗转相除法
  另一种
(二进制算法)

          若a=b, gcd(a,b)=a

          若a和b均为偶数, gcd(a,b)=2*gcd(a/2,b/2)

          若a为偶数, b为奇数, gcd(a,b)=gcd(a/2,b)

          若a和b均为奇数, gcd(a,b)=gcd(a-b,b)

    不需要除法, 适合大整数


2.lcm求法
 两项相乘 再 除以这两项的gcd


0 0
原创粉丝点击