poj2407

欧拉函数裸题。

欧拉函数:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。

欧拉函数的定义: E(N)= (  区间[1,N-1] 中与 N 互质的整数个数).

  对于 积性函数 F(X*Y),当且仅当 GCD(X,Y)= 1 时, F(X*Y) = F(X)* F(Y)

  任意整数可因式分解为如下形式:

   poj2407     其中( p1, p2 ... pk 为质数, ei 为次数 ) 

  所以

    poj2407

  因为 欧拉函数 E(X)为积性函数, 所以

    poj2407

  对于  poj2407  , 我们知道 因为pi 为质数,所以 [ 1, pi-1 ] 区间的数都与 pi 互质

  对于 区间[ 1, poj2407  ]  ,共有 poj2407 个数, 因为 poj2407 只有一个质因子,

  所以与 poj2407 约数大于1 的必定包含 质因子 poj2407  , 其数量为 poj2407

    所以   poj2407   

  又 E(N)为积性函数,所以可得 :

   poj2407 

  又因为  poj2407     其中( p1, p2 ... pk 为质数, ei 为次数 ) 

   poj2407      但是此计算公式,除法过多,所以计算速度较慢

  在程序中利用欧拉函数如下性质,可以快速求出欧拉函数的值 ( P为N的质因子 )

    若(N%P==0 && (N/P)%P==0) 则有:E(N)=E(N/P)*P;
 
    若(N%P==0 && (N/P)%P!=0) 则有:E(N)=E(N/P)*(P-1);
 
上一篇:【干货分享】前端面试知识点锦集03(JavaScript篇)——附答案


下一篇:Java注解基本原理