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

欧拉函数的几条重要性质

作者头像
glm233
发布2020-09-28 10:31:48
8340
发布2020-09-28 10:31:48
举报

欧拉函数:φ(n)表示从1~n-1中有多少个数与n互素。

\large \varphi(x) = \sum_{i < x} [i \bot x]
\large \varphi(x) = \sum_{i < x} [i \bot x]

① N是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)

② 除了N=2,φ(N)都是偶数.

③ 小于N且与N互质的所有数的和是φ(n)*n/2。

欧拉函数是积性函数——若m,n互质,φ(m*n)=φ(m)*φ(n)。

⑤ 当N为奇数时,φ(2*N)=φ(N)

若N是质数p的k次幂,φ(N)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟N互质。

p的倍数有p^k-1个

⑦ 当N是质数时,φ(N) = N-1

求一个数的欧拉函数 源程序

代码语言:javascript
复制
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define rg register ll
#define inf 2147483647
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
#define ll long long
#define maxn 2000000
const double eps=1e-8;
using namespace std;
inline ll read()
{
    char ch=getchar();ll s=0,w=1;
    while(ch<48||ch>57){if(ch=='-')w=-1;ch=getchar();}
    while(ch>=48&&ch<=57){s=(s<<1)+(s<<3)+(ch^48);ch=getchar();}
    return s*w;
}
inline void write(ll x)
{
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar(x%10+48);
}
ll n;
ll prime[maxn],visit[maxn],phi[maxn],tot;
inline void work()
{
    phi[1]=1;
    for(rg i=2;i<=n;i++)
    {
        if(!visit[i])
        {
            phi[i]=i-1;
            prime[++tot]=i;
        }
        for(rg j=1;j<=tot;j++)
        {
            ll k=prime[j]*i;
            if(k>maxn)break;
            visit[k]=1;
            if(i%prime[j]==0)
            {
                phi[k]=prime[j]*phi[i];
            }
            else  phi[k]=phi[i]*(j-1);
        }
    }
    cout<<phi[n]<<endl;
}
int main()
{
    n=read();
    work();
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/07/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档