zoukankan      html  css  js  c++  java
  • euler证明

    我们用g(x)表示x的欧拉函数值,即1~x与x互质的数的个数

    欧拉函数公式为: g(x)= y*((x1-1)/x1)*((x2-1)/x2)*((x3-1)/x3)....(其中x1, x2, x3....为质数)

     证明:

    1. 对于质数x,有g(x)=x-1

    2. 对于x^h,其中x为质数,那么显然1~x^h之间包含x因子的数不与x^h互质,有:

    x, 2*x, 3*x, 4*x.....x^(h-1)*x 共x^(h-1)个,很显然有g(x^h)=x^h-x^(h-1),其中x^(h-1)为

    不与x^h互质的数。

    例如:

    y=3^4
    ... 3 .2*3.. 3*3 ..4*3. 5*3 3*3*3 .7*3..... 3*3*3*3
    g(y)=3^4-3^3

    3. 对于任意一个数y,我们可以将其分解成质数的积的形式,再由乘法原理得到g(y)

    例如:
    y=3^4*5^7
    g(y)=(3^4-3^3)*(5^7-5^6)

    4. 综上所述:
    对于任意y=x1^h1*x2^h2*x3^h3......有:
    g(y)=(x1^h1-x1^(h1-1))*(x2^h2-x2^(h2-1))*(x3^h3-x3^(h3-1))....
        =x1^h1*(1-1/x1)*x2^h2*(1-1/x2)*x3^h3*(1-1/x3)....
        =y*(1-1/x1)*(1-1/x2)*(1-1/x3)....
        =y*((x1-1)/x1)*((x2-1)/x2)*((x3-1)/x3)....

    至此得到了欧拉函数

    代码:

     1 /*  int euler(int n){
     2     int ans=1;
     3     for(int i=2; i*i<=n; i++){
     4         if(n%i==0){
     5             ans*=(i-1);
     6             n/=i;
     7             while(n%i==0){
     8                 ans*=i;
     9                 n/=i;
    10             }
    11         }
    12     }
    13     if(n>1){
    14         ans*=n-1;
    15     }
    16 }*/
    17 
    18 int euler(int n){
    19     int ans=n;
    20     for(int i=2; i*i<=n; i++){
    21         if(n%i==0){
    22             ans=ans*(i-1)/i;
    23             while(n%i==0){
    24                 n/=i;
    25             }
    26         }
    27     }
    28     if(n>1){
    29         ans=ans*(n-1)/n;
    30     }
    31 }
    View Code
  • 相关阅读:
    Android ListView 列表视图
    android handler msg的使用 实现进度条
    Intent 传递数据
    微服务-springcloud
    微服务-dubbo学习
    日志收集系统
    微服务追踪
    链表有环判断,快慢指针两种方法/合并链表/删除重复元素/二分递归和while
    算法练习,链表二分最大n个
    池以及barrier简单
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6622469.html
Copyright © 2011-2022 走看看