素数筛&&欧拉筛
折腾了一晚上很水的数论,整个人都萌萌哒
主要看了欧拉筛和素数筛的O(n)的算法
这个比那个一长串英文名的算法的优势在于没有多次计算一个数,也就是说一个数只筛了一次,主要是在%==0之后跳出实现的,具体的解释看的迷迷糊糊,特别是欧拉函数的求解
http://blog.csdn.net/lerenceray/article/details/12420725
代码如下
1 void ES(){ 2 for(int i=2;i<n;i++){ 3 if (!pd[i]){ 4 prime[++top]=i; 5 phi[i]=i-1; 6 } 7 for (int j=1;j<=top&&prime[j]*i<=n;j++){ 8 pd[prime[j]*i]=1; 9 if (i%prime[j]==0){ 10 phi[prime[j]*i]=phi[i]*prime[j]; 11 break; 12 } 13 phi[prime[j]*i]=phi[i]*(prime[j]-1); 14 } 15 } 16 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步