51nod-1136 欧拉函数
2016-09-17 12:22
405 查看
百度百科:
网上代码实在没理解他的优化,就照着公式自己写了一遍,时间肯定是比他们多,但是还好过了。优化等明白了再补上
队友讲完之后明白嘞!
ans=ans/i*(i-1); 同分后,怕超过范围,先/后*
并且最后一步判断也类似于分解素数因子,如果最后!= 1 那么N就是最大的素数因子,需要进一步判断
网上代码实在没理解他的优化,就照着公式自己写了一遍,时间肯定是比他们多,但是还好过了。优化等明白了再补上
#include <iostream> #include <cstring> #include <string> #include <vector> #include <queue> #include <cstdio> #include <map> #include <cmath> #include <algorithm> using namespace std; int main() { int n,ans; while(~scanf("%d",&n)) { ans=n; for(int i=2;i<=n;++i) { if(n==1) break; if(n%i==0) { ans=ans-ans/i; while(n%i==0) n/=i; } } printf("%d\n",ans); } return 0; }
队友讲完之后明白嘞!
ans=ans/i*(i-1); 同分后,怕超过范围,先/后*
并且最后一步判断也类似于分解素数因子,如果最后!= 1 那么N就是最大的素数因子,需要进一步判断
#include <iostream> #include <cstring> #include <string> #include <vector> #include <queue> #include <cstdio> #include <map> #include <cmath> #include <algorithm> #define INF 0x3f3f3f3f #define MAXN 100010 using names 4000 pace std; int main() { int n,ans; while(~scanf("%d",&n)) { ans=n; for(int i=2;i*i<=n;++i) { if(n==1) break; if(n%i==0) { ans=ans/i*(i-1); while(n%i==0) n/=i; } } if(n!=1) { ans=ans/n*(n-1); } printf("%d\n",ans); } return 0; }
相关文章推荐
- 51Nod 1136 欧拉函数
- 51nod--1136 欧拉函数(0级算法题)
- 51Nod-1136-欧拉函数
- 51nod 1136 欧拉函数(欧拉函数)
- 51nod-【1136 欧拉函数】
- 51nod 1136 欧拉函数
- 51nod 1136 欧拉函数
- 51nod 1136 欧拉函数(少于或等于n的数中与n互质的数的数目,1也算)
- 51nod 1136 欧拉函数
- 51nod - 1136 欧拉函数(欧拉函数)
- 51nod 1136 欧拉函数 【模板 】
- 51nod 1136 欧拉函数
- 51nod-【1136 欧拉函数】
- 51NOD 1136 欧拉函数模板
- 51Nod-1136 欧拉函数【数论】
- 51Nod-1136-欧拉函数
- 51Nod 1136 欧拉函数
- 51nod_1136 欧拉函数
- [杜教筛] 51Nod 1239: 欧拉函数之和
- 51nod 1040最大公约数和(欧拉函数)