摘要: 检验一个数是否是素数,朴素的方法有试除法,筛法,因为费马小定理和模的运算,可以将时间复杂度降为klogN,k是常数,k越大,算法返回结果正确的概率越高 费马小定理 a^(p-1)≡1 (mod p)(a不是p的倍数) 费马小定理的逆定理不一定成立,即可能是合数也返回了1,这样的数称为伪素数,但a不同 阅读全文
posted @ 2021-09-12 22:01 empty_thought 阅读(699) 评论(0) 推荐(0)
摘要: 辗转相除法/欧几里得算法求两个数的最大公约数,gcd(m,n)=gcd(n,m%n) 这个算法的效率非常高,是对数级别的时间复杂度 当m>=2n时,m->n,规模至少变成了原来的1/2,当m<2n,虽然这次规模不会变成一半,但下次规模会变成一半,若仍不会变成一半,不难证明上次规模至少变成了2/3,整 阅读全文
posted @ 2021-09-12 16:27 empty_thought 阅读(109) 评论(0) 推荐(0)
摘要: 在计算机做n位二进制乘法时,每一位与n位相乘,乘以n次,时间复杂度是n^2 现在采取一种办法:每次把被乘数除以2,乘数乘以2,最后肯定被乘数变为1或者是0,但结果可能偏小,因为被乘数会因为是奇数不能被2整除而丢失一部分 x/2=(x-1)/2 x/2 * y * 2->(x-1)/2 * y * 2 阅读全文
posted @ 2021-09-12 10:53 empty_thought 阅读(532) 评论(0) 推荐(0)