前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数论 欧拉函数_数论欧拉函数

数论 欧拉函数_数论欧拉函数

作者头像
全栈程序员站长
发布2022-09-23 10:52:44
3140
发布2022-09-23 10:52:44
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君

欧拉函数:

就是对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。

欧拉函数的通式:φ(n)=n*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)……(1-1/pn)

其中p1, p2……pn为n的所有质因数,n是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。

在这里插入图片描述
在这里插入图片描述

所以,根据通式我们可以打出以下代码:

代码语言:javascript
复制
ll eular(ll n)
{ 
   
    ll ans = n;
    for(int i=2; i*i <= n; ++i)
    { 
   
        if(n%i == 0)
        { 
   
            ans = ans/i*(i-1);
            while(n%i == 0)
                n/=i;
        }
    }
    if(n > 1) ans = ans/n*(n-1);
    return ans;
}

其中,if(n>1)ans-=ans/n; 这个语句是为了保证我们已经除完了n的所有的素因子,有可能还会出现一个我们未除的因子,如果结尾出现n>1 ,说明我们还剩一个素因子木有除。

打表求欧拉函数:

听说这样比较快。。。。

代码语言:javascript
复制
void euler()  
{ 
     
    for(int i=2;i<maxn;i++){ 
     
        if(!E[i])  
        for(int j=i;j<maxn;j+=i){ 
     
            if(!E[j])E[j]=j;  
            E[j]=E[j]/i*(i-1);  
        }  
    }  
}
当然,还有百度百科版的:( 欧拉筛素数同时求欧拉函数)
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
void get_phi()  
{ 
     
    int i, j, k;  
    k = 0;  
    for(i = 2; i < maxn; i++)  
    { 
     
        if(is_prime[i] == false)  
        { 
     
            prime[k++] = i;  
            phi[i] = i-1;  
        }  
        for(j = 0; j<k && i*prime[j]<maxn; j++)  
        { 
     
            is_prime[ i*prime[j] ] = true;  
            if(i%prime[j] == 0)  
            { 
     
                phi[ i*prime[j] ] = phi[i] * prime[j];  
                break;  
            }  
            else  
            { 
     
                phi[ i*prime[j] ] = phi[i] * (prime[j]-1);  
            }  
        }  
    }  
}  

欧拉函数的一些性质: ① 当m,n互质时,有phi(m*n)= phi(m)*phi(n);

② 若i%p==0,有phi(i*p) = p * phi(i);

③ 对于互质x与p,有x^phi§≡1(mod p),因此x的逆元为x^(phi§-1),即欧拉定理。 (特别地,当p为质数时,phi(p)=p-1,此时逆元为x^(p-2),即费马小定理)

④ 当n为奇数时,phi(2n)=phi(n)

⑤ 若x与p互质,则p-x也与p互质,因此小于p且与p互质的数之和为phi(x)*x/2;

⑥N>1,不大于N且和N互素的所有正整数的和是 1/2 *N *eular(N)。

⑦若(N%a == 0 && (N/a)%a==0) 则有:E(N)=E(N/a)*a;

⑧若(N%a==0 && (N/a)%a!=0) 则有:E(N)=E(N/a)*(a-1);

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172045.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 欧拉函数:
    • 欧拉函数的通式:φ(n)=n*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)……(1-1/pn)
      • 打表求欧拉函数:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档