poj 2478(快速求解欧拉函数优化版。。。)
来源:互联网 发布:淘宝上买组装机可靠吗 编辑:程序博客网 时间:2024/06/11 14:08
之前一直在用
void get_eular() { memset(eul,0,sizeof(eul)); eul[1]=1; for(int i=2;i<maxlen;i++) if(!eul[i]) for(int j=i;j<maxlen;j+=i){ if(!eul[j]) eul[j]=j; eul[j]=eul[j]/i*(i-1); } eul[1]=0;eul[2]=1; for(int i=3;i<maxlen;i++){ eul[i]+=eul[i-1]; }}来求前n项的欧拉函数值。。。后来发现了一个比较好的优化。。。。。请看这里的一个讲解 http://www.cnblogs.com/suno/archive/2008/02/04/1064368.html
然后按照优化方案来写程序。。。进入了100ms以内了。。。。嗨皮。。
#include <iostream>#include <cstdio>#include<cstring>using namespace std;const int maxlen=1000010;long long eul[maxlen];int pri[maxlen],f[maxlen],isprim[maxlen],p=0;inline void get_prim(){ memset(isprim,1,sizeof(isprim)); for(int i=2;i<maxlen;i++){ if(isprim[i]) pri[p++]=i; for(int j=0;j<p && i*pri[j]<maxlen;j++){ int k=pri[j]*i; isprim[k]=0,f[k]=pri[j]; // 得到k的最小素因子 if(i%pri[j]==0) break; } }}inline void get_eul(){ for(int i=2;i<maxlen;i++) if(isprim[i]) eul[i]=i-1; else{ int k=i/f[i]; if(k%f[i]==0) eul[i]=eul[k]*f[i]; else eul[i]=eul[k]*(f[i]-1); } for(int i=3;i<maxlen;i++) eul[i]+=eul[i-1];}int main(int argc, char** argv) { int m; get_prim(); get_eul(); while(scanf("%d",&m) && m) printf("%lld\n",eul[m]); return 0;}
- poj 2478(快速求解欧拉函数优化版。。。)
- 快速求解欧拉函数
- poj 2154 Color(polya计数 + 欧拉函数优化)
- POJ-2478(欧拉函数)
- poj 2478 (欧拉函数)
- 求解欧拉函数值
- 欧拉函数值求解
- POJ - 2478 欧拉函数..
- poj 2478 欧拉函数
- poj 2478 欧拉函数
- POJ-2478 欧拉函数
- zoj 1919 poj 2337 Catenyms(欧拉路径求解)
- POJ 3040 浅谈矩阵快速幂优化LogN斐波拉契函数求解
- POJ 1041 求解欧拉回路方案
- poj 1780 欧拉回路求解
- Poj 2154 Color (Polya计数 欧拉函数优化)
- poj 2154 Color 欧拉函数优化的ploya计数
- POJ 2154 Color Polya定理+欧拉函数优化 -
- linux的触摸屏之四:android的tslib对下层Linux的控制
- 在 IIS6 ASP.NET 4.0 安装 最常遇到的四个问题
- 使用Python清理工程目录,方便代码备份
- 专线广域网安全解决方案
- learning jQuery 学习笔记九(+jQuery 1.4.1 API)-- DOM操作-基于命令改变页面 ----操作属性
- poj 2478(快速求解欧拉函数优化版。。。)
- MMORPG - 战斗系统,概述设计
- 一些好的资料网址
- 关于生成及引入资源的总结
- 数据中心安全解决方案
- android系统中的多线程(一): 关于在android中启动线程以及线程间的交互
- opera下canvas绘制圆弧arc的一个bug
- MVC之父对“模型-视图-控制器”的最初定义
- linux的触摸屏之五:帧缓冲设备上较准界面的配置