zoukankan      html  css  js  c++  java
  • 欧拉函数

    内容:计算一个数内的与这个数互质元素的个数

    每个数都能被分解成若干质数的乘积

    设p1^a1×p2^a2×…×pk^ak为正整数n的素数乘积式,
    那么这个正整数的互质元素个数为:
    =n×(1-1/p1) ×(1-1/p2)×…×(1-1/pk)
    也为:
     1 int eular(int n)
     2 {int k,res;
     3  k=2; res=n;
     4  while (k*k<=n){
     5     if (n%k==0){
     6           res=res/k*(k-1);
     7           while (n%k==0) n/=k;
     8     } 
     9       k++;
    10  }
    11  if (n>1) res=res/n*(n-1);//40的例子中 5会到这里来
    12  return res;
    13 } 
    14         

    求1-n之间所有正整数的欧拉函数

     1 void eular(int n){
     2 for(int i=2;i<=n;i++){
     3    if (!IsPrime[i]){prime[++cnt]=i;  phi[i]=i-1;}
     4    for(int j=1;j<=cnt;j++){
     5        if (prime[j]*i>n) break;
     6        Isprime[prime[j]*i]=1;
     7        if (i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];  break;}
     8        else  phi[i*prime[j]]=phi[i]*(prime[j]-1);
     9    }
    10 }
    11 } 

    例题:

    1.
    给出一个数字m (1 <= m <= 1000000), 数字K (1 <= K <= 100000000).求与M互质的第K个数字。
    找到规律了吗?
    假设一个数是12
    比12小的且与12互质的是 1      5      7      11
    更大的是这么多:     13   17    19     23
                  25   29    31     35
    这样的话,只用找出比n小的欧拉分别为多少,个数有多少,然后加自己加自己加自己......
    为什么?
    因为一个数a与n互质,那a+n与n也互质啊。
     
    2.
    给定一个整数N,你需要求出∑Gcd(i, N)(1<=i <=N)。//最大公约数之和
    比如n=6时:
    因为6的因数是1,2,3,6,所以n和小于n的数,两者的公约数只有可能在1,2,3,6里取。所以就算出每个公约数对应的个数就好了
    如果对于数字i,如果Gcd( i ,6)=1,则转化求与6互质的数字有多少个,易知有2个,为1和5;
    如果对于数字i,如果Gcd( i ,6)=2,则转化求与3互质的数字有多少个,易知有2个,为1和2;
           为什么?我们设i=2*a,6=2*3,那Gcd(a,3)=1,即转换成与三互质的数的个数。
    如果对于数字i,如果Gcd( i ,6)=3,则转化求与2互质的数字有多少个,易知有1个,为1;
    如果对于数字i,如果Gcd( i ,6)=6,则转化求与1互质的数字有多少个,易知有1个,为1。
    Ans=2*1+2*2+3*1+6*1
          =2+4+3+6
          =15
     
    欧拉函数的性质:
      积性函数:对于所有互质的整数a和b有f(a*b)=f(a)*f(b)的数论函数。
    1:如果n为某一素数p,则fy(p)=p-1
    2:欧拉函数是积性函数,即当(m,n)=1,fy(m*n)=fy(m)*fy(n)
    3:如果p|n,且p^2|n,则fy(n)= fy(n/p)*p,
      因为n和n/p包含相同的质因子,只是P的指数不一样,因而按欧拉函数的计算公式写出,两者相除,商为P。
      易知如果n为某一素数p的幂次p^a,fy(p^a)=(p-1)×p^(a-1)
    4:如果p|n,且p^2|n不成立时,则p与n/p互质,于是j(n)= fy(n/p)*(p-1)
    5:与N互质的数字和为n*fy(n)/2,因为gcd(n,x)=gcd(n,n-x)
    6:n是奇数时,fy(2n)=fy(n)
     
    无愧于心,不困于情。
  • 相关阅读:
    1105 Spiral Matrix (25 分)螺旋矩阵
    1089 Insert or Merge (25 分)
    1044 Shopping in Mars (25 分)二分查找
    1068 Find More Coins (30 分)记忆化搜索
    1133 Splitting A Linked List (25 分)
    1145 Hashing
    1147 Heaps (30 分)
    1098 Insertion or Heap Sort (25 分)
    自测-3 数组元素循环右移问题 (20 分)
    自测-1 打印沙漏 (20 分)
  • 原文地址:https://www.cnblogs.com/SUMMER20020929/p/9752372.html
Copyright © 2011-2022 走看看