NYOJ 291 LK数学题(欧拉函数)
2014-03-09 13:40
288 查看
LK的数学题
时间限制:1000 ms | 内存限制:65535 KB难度:3
描述 LK最近遇到一个问题,需要你帮她一下。一个整数n,求[1,n)中,和n互素的数的个数。
输入 多组测试数据,每一行有一个整数n(n<1000000001),0表示输入结束。
输出 小于n同时和n互素的整数的个数 样例输入
7 12 0
样例输出
6 4
初次接触到欧拉函数,当然先百度啦!!
在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。 φ函数的值 通式:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。 (注意:每种质因数只一个。比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4 若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。 设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值,这里函数φ:N→N,n→φ(n)称为欧拉函数。欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。特殊性质:当n为奇数时,φ(2n)=φ(n), 证明与上述类似。 c语言实现
using namespace std;
int eular(int n)
{
int ret=1,i;
for(i=2; i*i<=n; i++)
if(n%i==0)
{
n/=i;
ret*=i-1;
while(n%i==0)
{
n/=i;
ret*=i;
}
}
if(n>1)
ret*=n-1;
return ret;
}
int main()
{
int n;
while(1)
{
cin>>n;
if(n==0)
return 0;
cout<<eular(n)<<endl;
}
return 0;
}
相关文章推荐
- HDU 1695 GCD(欧拉函数+容斥原理)
- 逆向分析技术总结(转)
- .Net MVC 网站中配置文件的读写
- Unix 編譯藝術之一:Unix歷史
- Cloud Computing Companies
- c# ConfigurationManager
- Hyper-V升级系列PART5:2012 Hyper-V群集升级至2012 R2
- android---------ndk中的各个版本的下载地址。
- 当android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 线程通信机制:共享内存 VS 消息传递
- git 常用命令
- Hyper-V升级系列PART4:2012 Hyper导入虚拟机
- Android客户端连接Struts2服务器,连接不上的几个原因
- open和fopen的区别(转)
- C++中实现通用数据结构(转)
- snprintf() 替代 sprintf()
- linux 快捷键总结
- Leetcode_Add Two Numbers
- HDU 1272 小希的迷宫(并查集:判断连通且结构为树)