蒟蒻真的是太渣了……尤其是数学部分被诸多大佬虐的渣都不剩……
所以今天蒟蒻我痛定思痛决定向数学发起冲锋!复习一下欧拉函数先……/糊脸/糊脸
欧拉函数定义: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 ",ans); } return 0; }