数学:复习欧拉函数

蒟蒻真的是太渣了……尤其是数学部分被诸多大佬虐的渣都不剩……

所以今天蒟蒻我痛定思痛决定向数学发起冲锋!复习一下欧拉函数先……/糊脸/糊脸

欧拉函数定义:1~N中和N互质的数的个数被称为欧拉函数,记为φ(N)。

欧拉函数一般公式:φ(N)=

证明:设p是N的质因子,1~N中p的倍数一共有N/p个,

  同理,若q也是N的质因子,则1~N中q的倍数有N/q个。

  如果我们把这N/p和N/q个数去掉,其中q与p的公倍数被排除了两次,要加回来。

  所以1~N中不与N含有共同质因子p或q的数的个数为:N*(1-1/p)(1-1/q)

  (以上证明用到了容斥原理)

  证毕。

给道模板题

题目大意:给出一段区间,求出这段区间的所有数的欧拉函数值和。
彻头彻尾的板子题。不解释,上代码!
 
 
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int phi[3000003];
int main()
{
    int a,b;
    long long ans=0;
    while(scanf("%d %d",&a,&b)!=EOF)
    {
        ans=0;
        for(int i=2;i<=b;++i)
            phi[i]=i;
        for(int i=2;i<=b;++i)
            if(phi[i]==i)
                for(int j=i;j<=b;j+=i)
                    phi[j]=phi[j]/i*(i-1);
        for(int i=a;i<=b;++i)
            ans+=(long long)phi[i];
        printf("%lld\n",ans);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/xingmi-weiyouni/p/11009650.html
今日推荐