欧拉函数
2015-09-20 09:42
148 查看
题目描述
给定一个数字NN, 输出NN的欧拉函数值。
输入:
输入包含一个正整数NN, 2≤N≤2000000000.2 \le N \le 2\,000\, 000 \, 000.
输出:
输出一个整数,表示NN的欧拉函数值。
样例输入:
6
5
样例输出:
2
4
解题思路
设一个数A=ax11∙ax22∙⋯∙axnn A= a_1^{x_1} \bullet a_2^{x_2} \bullet \cdots \bullet a_n^{x_n}, 那么AA的欧拉函数:
phi(A)=ax1−11∙(a1−1)∙ax2−12∙(a2−1)∙⋯∙axn−1n∙(an−1)phi(A) = a_1^{x_1-1} \bullet (a_1-1) \bullet a_2^{x_2-1} \bullet (a_2-1) \bullet \cdots \bullet a_n^{x_n-1} \qquad \qquad \bullet (a_n-1)
整理这个公式的时候,不能发现,从这个公司出发很容易地用程序去实现求phi(A)phi(A)的操作。
具体的做法就是,先令temp=Atemp=A, 然后每找到一个AA的质因子xx,就从temptemp中除掉一个该因子xx,再乘以(x−1)(x-1)。
通过这道题,可以发现,在做一些数学类问题的时候,往往推出的公式能简化程序。
代码如下:
// Euler.cpp
效果如下:
给定一个数字NN, 输出NN的欧拉函数值。
输入:
输入包含一个正整数NN, 2≤N≤2000000000.2 \le N \le 2\,000\, 000 \, 000.
输出:
输出一个整数,表示NN的欧拉函数值。
样例输入:
6
5
样例输出:
2
4
解题思路
设一个数A=ax11∙ax22∙⋯∙axnn A= a_1^{x_1} \bullet a_2^{x_2} \bullet \cdots \bullet a_n^{x_n}, 那么AA的欧拉函数:
phi(A)=ax1−11∙(a1−1)∙ax2−12∙(a2−1)∙⋯∙axn−1n∙(an−1)phi(A) = a_1^{x_1-1} \bullet (a_1-1) \bullet a_2^{x_2-1} \bullet (a_2-1) \bullet \cdots \bullet a_n^{x_n-1} \qquad \qquad \bullet (a_n-1)
整理这个公式的时候,不能发现,从这个公司出发很容易地用程序去实现求phi(A)phi(A)的操作。
具体的做法就是,先令temp=Atemp=A, 然后每找到一个AA的质因子xx,就从temptemp中除掉一个该因子xx,再乘以(x−1)(x-1)。
通过这道题,可以发现,在做一些数学类问题的时候,往往推出的公式能简化程序。
代码如下:
// Euler.cpp
#include <stdio.h> #include <stdlib.h> typedef __int64 int64; //定义__int64的别名为int64 int64 phi(int64 a){ //求a的欧拉函数值,即phi(a) int64 temp=a; for (int64 i=2;i*i<=a;i++) //寻找a的质因子 { if (a%i == 0) { while(!(a%i)) a /= i; temp = temp/i * (i-1); } } if(a!=1) temp = temp/a * (a-1); return temp; } void main() { int64 a; while(scanf("%I64d",&a)!=EOF) printf("%I64d\n",phi(a)); //__int64的格式化输出 }
效果如下:
相关文章推荐
- Mysql学习笔记(四)聊聊数据库索引
- C++ 使用模板实现单例模式
- SQLite3使用方法大全(四)之数据库创建、附加、分离
- s5pv210的定时器
- 0916 编程实验一 词法分析程序
- 七个对我最好的职业建议(精简版)
- Myeclipse 破解
- jquery学习笔记(一)—基础语法
- c/c++/boost字符串的学习
- ZOJ 3641 Information Sharing
- Ubuntu update appear GPG problem
- 浅谈IT
- Servlet初始化、运行、销毁全部过程
- NotePad++实现16进制显示文本的方法
- Spring 声明式事务,propagation属性列表及isolation(隔离级别)
- (转)Servlet的生命周期——初始化、运行、销毁全部过程
- android多媒体——6步学会MediaRecorder录音
- poj 1094 Sorting It All Out (拓扑排序)
- Memcached学习笔记
- 我要的