您的位置:首页 > 其它

欧拉函数的递推形式

2013-07-29 14:40 423 查看
数论,对正整数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),其中Pi是质数并且是x的约数。

#include <cstdio>
#include <iostream>
#include <cstring> 
using namespace std;
int main()
{
	int i,j,a[100],n;
	memset(a,0,sizeof(a));
	a[1]=1;
	for (i=2;i<=100;i++)
	{
		if (!a[i])
		{
			for (j=i;j<=100;j+=i)
			{
				if (!a[j])
					a[j]=j;
				a[j]=a[j]/i*(i-1);
			}
		}
	}
	while (~scanf("%d",&n))
	{
		cout<<a
<<endl;
	}
}




若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
long long oula(long long n)
{
	int i;
	long long ans=1;
	for (i=2;i*i<=n;i++)
	{
		if (n % i==0)
		{
			ans*=i-1;
			n/=i;
			while (n % i==0)
			{
				n/=i;
				ans*=i;
			}
		}
	}
	if (n>1) ans*=n-1;
	return ans;
}
int main()
{
	long long n;
	while (~scanf("%lld",&n) && n)
	{
		printf("%lld\n",oula(n));
	} 
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: