您的位置:首页 > 其它

初等数论中的欧拉公式

2013-04-15 22:43 162 查看
  求小于n的数里,与n互为素数的个数

一.

  奇数和偶数是否一定互素(排除1,不是比如6和9);1和不和任意数互素(比如6采用欧拉定理验证下)。

  若n已经进行唯一分解,直接欧拉公式。

  如果n的标准素因子分解式是p1^a1*p2^a2*……*pm^am,其中众pj(j=1,2,……,m)都是素数,而且两两不等。则有 φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm) 利用容斥原理可以证明它。

二.不知唯一分解

  

#include<iostream>
#include<stdio.h>
using namespace std;

int main()
{
int n,i;
double sum;
while(scanf("%d",&n)&&n)
{
sum=n;
//还是运用了欧拉公式
if(n%2==0)//2也是素数
{
sum*=(double)(1 - 1.0/2);//为了突出关系写成了 (1 - 1.0/2) ,里面一定是1.0
while(n%2==0)
n/=2;
}

/*类似筛法的思想,已经去掉了2及其倍数,下面找奇因子,必须从小到大枚举,
3枚举到的话立马除尽3及其倍数防止再次枚举9(这样就不对了)
*/
for(i=3;n>1;i+=2)
{
if(n%i==0)
sum*=(1-(double)1/i);
while(n%i==0)
n/=i;
}
printf("%d\n",(int)sum);
}
//while(1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: