LightOJ 1007 欧拉函数
2016-11-29 20:18
471 查看
题意:给你两个数a,b,求a到b之间的数的欧拉函数值之和。
欧拉函数φ(x) 表示不大于x的与x互质的数的个数。
φ(x)= x(1-1/P1)(1-1/P2)(1-1/P3)……其中P1,P2,P3…是x的质因数。
又可以表示成φ(x)= x*(P1-1)/P1*(P2-1)/P2*(P3-1)/P3……
预处理出φ(x),然后记录前缀和,假设F
=∑(φ(i))(i=1..n),则最终答案为F[b]-F[a-1]
欧拉函数φ(x) 表示不大于x的与x互质的数的个数。
φ(x)= x(1-1/P1)(1-1/P2)(1-1/P3)……其中P1,P2,P3…是x的质因数。
又可以表示成φ(x)= x*(P1-1)/P1*(P2-1)/P2*(P3-1)/P3……
预处理出φ(x),然后记录前缀和,假设F
=∑(φ(i))(i=1..n),则最终答案为F[b]-F[a-1]
超级丑的代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define Up(a,b,c) for(ull a(b),end##a(c);a<=end##a;++a) #define Down(a,c,b) for(ull a(b),end##a(c);a>=end##a;--a) #define sUp(a,c,b) for(ull a(b),end##a(c);a<=end##a;++a) #define sDown(a,b,c) for(ull a(b),end##a(c);a>=end##a;--a) typedef unsigned long long ull; using namespace std; const ull N=5000000; ull Phi[5050500];//结果很大,要用unsigned long long!!!!!!!!!! void Ycl_phi(){ Phi[1]=1; Up(i,2,N){ if(!Phi[i]){ for(ull j=i;j<=N;j+=i){ if(!Phi[j])Phi[j]=j; (Phi[j]/=i)*=(i-1); }; } Phi[i]*=Phi[i]; Phi[i]+=Phi[i-1]; } } int main(){ Ycl_phi(); ull T,l,r; scanf("%llu",&T); Up(t,1,T){ scanf("%llu%llu",&l,&r); printf("Case %llu: %llu\n",t,Phi[r]-Phi[l-1]); } return 0; }
相关文章推荐
- Lightoj1007【欧拉函数-素数表】
- LightOJ-1007-Mathematically Hard [欧拉函数]
- LightOj1007欧拉函数
- LightOJ - 1007 Mathematically Hard 欧拉函数快速打表+前缀和
- lightoj 1007 欧拉函数
- LightOJ1007---Mathematically Hard (欧拉函数)
- LightOJ 1007 Mathematically Hard 欧拉函数
- lightoj 1007 - Mathematically Hard 欧拉函数
- lightoj 1007 欧拉函数
- lightoj 1007 - Mathematically Hard 欧拉函数
- LIGHTOJ 1007 – MATHEMATICALLY HARD【欧拉函数】
- LightOj1007 - Mathematically Hard(欧拉函数)
- lightoj 1007
- GCD nyoj1007(欧拉函数运用&&数论入门)
- lightoj欧拉函数打表(简单)
- lightoj-1370 Bi-shoe and Phi-shoe( 欧拉筛 求 欧拉函数)
- LightOJ 1007 Mathematically Hard
- lightoj 1007
- LightOJ 1370 Bi-shoe and Phi-shoe(欧拉函数+打表)
- LightOJ1370_Bi-shoe and Phi-shoe_伪欧拉函数,真素数筛