HDU 2824 The Euler function(欧拉函数)
2016-01-01 21:37
741 查看
Description
给出两个正整数a和b,求a到b之间所有数的欧拉函数值之和
Input
多组用例,每组用例包括两个正整数a和b(2 < a < b < 3000000),以文件尾结束输入
Output
对于每组用例,输出a到b之间所有数字的欧拉函数值之和
Sample Input
3 100
Sample Output
3042
Solution
欧拉函数简单题,打个欧拉函数表然后直接加就好
Code
给出两个正整数a和b,求a到b之间所有数的欧拉函数值之和
Input
多组用例,每组用例包括两个正整数a和b(2 < a < b < 3000000),以文件尾结束输入
Output
对于每组用例,输出a到b之间所有数字的欧拉函数值之和
Sample Input
3 100
Sample Output
3042
Solution
欧拉函数简单题,打个欧拉函数表然后直接加就好
Code
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; #define maxn 3111111 typedef long long ll; int euler[maxn],prime[maxn],res; void get_euler(int n) { memset(euler,0,sizeof(euler)); euler[1]=1; res=0; for(int i=2;i<=n;i++) { if(!euler[i]) { euler[i]=i-1; prime[res++]=i; } for(int j=0;j<res&&prime[j]*i<=n;j++) { if(i%prime[j]) euler[prime[j]*i]=euler[i]*(prime[j]-1); else { euler[prime[j]*i]=euler[i]*prime[j]; break; } } } } int main() { get_euler(3000000); int a,b; while(~scanf("%d%d",&a,&b)) { ll ans=0ll; for(int i=a;i<=b;i++) ans+=euler[i]; printf("%lld\n",ans); } return 0; }
相关文章推荐
- ORM greenDAO基本用法
- Android开发 更改返回button的图标
- zzuoj--1001--汽水瓶(简单数学)
- 文章标题
- mac x Yosemide(10.10) 下安装 jdk 1.7 (jdk 1.8) 要求Mac OS X10.7.3或更高版本解决
- 单例模式...(ARC方式)
- CentOS更改yum源与更新系统
- POJ 1852 Ants (贪心)
- C#中异步及winform中界面假死
- OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法
- win32api pywin32 安装后出现 ImportError: DLL load failed
- 搭建MiniGUI开发环境
- CentOS-7-x86_64-DVD-1503-01安装盘中Package包中的 软件
- 25到35的十年该怎么过(转载)
- HDU 2136 Largest prime factor(数论)
- Java事件处理
- 增加辅助的数据库组件
- 增加辅助的数据库组件
- 增加辅助的数据库组件
- Tiny HTTPd 开源web服务器搭建过程