知识点:
1.1埃氏筛法:暴力枚举打表 O(nloglogn)
1.2线性筛法:对于每个数x,遇到x%prime[i]==0的第一个i退出,使得每个合数都被它的最小质因子筛掉 O(n)
例1.1H-合成数poj3292:暴力的一题 筛数打标记O(nlogn)
例1.2求最小质数:平均每O(logn)会出现一个质数,于是暴力即可 O(sqrt(n)logn)
1.3 辗转相除法
gcd(a,b)=gcd(a-b,b)=gcd(b,a%b) 时间复杂度O(logn)
ab=gcd(a,b)*lcm(a,b)
二进制优化
1 int gcd(int a,int b) 2 { 3 if(!a || !b) 4 return a^b; 5 int i=0,j=0; 6 while(!(a&1)) 7 a>>=1,i++; 8 while(!(b&1)) 9 b>>=1,j++; 10 while(a!=b) 11 { 12 if(a<b) 13 a^=b,b^=a,a^=b; 14 a-=b; 15 while(!(a&1)) 16 a>>=1; 17 } 18 return a<<min(i,j); 19 }