BIT1055The Euler function
来源:互联网 发布:中文域名好吗 编辑:程序博客网 时间:2024/04/25 13:06
题意:
给a和b,求
f[a]+f[a+1]+....f[b]
f为对应的欧拉函数值
解法:
线性筛法,因为欧拉函数是积性函数
可用筛法计算欧拉函数值
若p ∤ i,ϕ(p*i)=(p-1)*ϕ(i)
若p|i, ϕ(p*i)=p*ϕ(i)
根据以上两个式子将1到10^6内所有数的欧拉函数值通过筛法算出来
然后用ans数组代表
ans[i]=f[1]+f[2]+...f[ans]
最后输入a和b时,结果就是
ans[b]-ans[a]+f[a]
#include<iostream>#include<algorithm>#include<cstdio>using namespace std;#define MAX 1000100long long f[MAX];//欧拉函数的值void init()//筛出MAX以内的所有数的欧拉函数值{memset(f,0,sizeof(f));f[1]=1;for(long long i=2;i<MAX;i++){if(f[i]==0)//i为素数{f[i]=i-1;for(long long j=1;j*i<MAX;j++)//若p ∤ i,ϕ(p*i)=(p-1)*ϕ(i)//若p|i, ϕ(p*i)=p*ϕ(i)//p为素数,i为倍数{if(j%i==0){f[i*j]=i*f[j];}else{f[i*j]=(i-1)*f[j];}}}}}long long ans[MAX];int main(){init();long long a,b;ans[1]=f[1];for(long long i=2;i<MAX;i++){ans[i]=ans[i-1]+f[i];}while(~scanf("%d %d",&a,&b)){printf("%lld\n",ans[b]-ans[a]+f[a]);}return 0;}
- BIT1055The Euler function
- HDU The Euler function
- hdu --- The Euler function
- hdu2824-The Euler function
- hdu2824-The Euler function
- the euler function
- hdu2824:The Euler function
- The Euler function
- hdu2824 The Euler function
- hdu2824(the Euler Function)
- HDU 2824:The Euler function【Euler】
- HDU 2824 The Euler function
- 欧拉函数 (Euler Function)
- hdu 2824 The Euler function
- Hdu 2824 The Euler function
- [HDU 2824]The Euler function
- hdu 2824 The Euler function
- hdu 2824 The Euler function
- iPhone开发【二十三】常用IOS开源组件【第1篇】
- U-Boot的配置、编译、连接过程
- java 静态内部类
- 关于JAVA中的singleton模式
- oracle 12541错误解决办法
- BIT1055The Euler function
- 【Android开发学习06】Android中的文件I/O操作
- ZTE将在MWC大会上展示Firefox操作系统手机
- php 登录之后,返回会员上一次访问的路径网址
- iPhone开发【二十四】数据持久化总结之第4篇—sqlite3数据库
- errors running builder 'Android Pre Compiler' on project'项目名称'
- GDI坐标系统(下)
- Lucene 初试
- 《敏捷个人》周刊 第16期