HDU 5317 RGCDQ
来源:互联网 发布:rxjava2 知乎 编辑:程序博客网 时间:2024/05/04 08:26
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317
题意:一个数n可以分解成若干个质数相乘的等式(如12=2*2*3有2个不同的质数,10=2*5有2个不同的质数),那么我们认为f(12)=2,f(10)=2,求gcd(f[L],f[R])
思路:1<= L,R <= 1000000,2*3*5*7*11*13*17*19大于1000000,因此最多有7种质数,f[x]<=7,我们用素数筛法可以预处理出1000000以内所有数的f[x],然后处理所有的情况就可以了
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define maxn 1000000using namespace std;int prime[maxn+30],num[maxn+30][10];void init(){ memset(num,0,sizeof(num)); memset(prime,0,sizeof(prime)); for (int i=2;i<=maxn;i++) { if (!prime[i]) { for (int j=i*2;j<=maxn;j+=i) { prime[j]++; } } } for (int i=2;i<=maxn;i++) { for (int j=1;j<=7;j++) num[i][j]=num[i-1][j]; num[i][prime[i]]++; }}int main(){ init(); int t,l,r; scanf("%d",&t); while (t--) { int tmp[10]; scanf("%d%d",&l,&r); for (int i=1;i<=7;i++) { tmp[i]=num[r][i]-num[l-1][i]; } int res; if (tmp[7]>=2) res=7; else if (tmp[6]>=2) res=6; else if (tmp[5]>=2) res=5; else if (tmp[4]>=2) res=4; else if (tmp[3]>=2 || tmp[6] && tmp[2]) res=3; else if (tmp[2]>=2 || (tmp[6] && tmp[3]) || (tmp[4] && tmp[2])) res=2; else res=1; printf("%d\n",res); }}
0 0
- HDU 5317 RGCDQ
- HDU 5317 RGCDQ
- hdu 5317 RGCDQ
- HDU 5317 RGCDQ
- hdu 5317 RGCDQ
- hdu 5317 RGCDQ
- HDU 5317 RGCDQ
- HDU 5317 RGCDQ
- hdu 5317 RGCDQ
- HDU 5317(RGCDQ-统计)
- HDU 5317 RGCDQ
- HDU 5317 RGCDQ
- HDU 5317 RGCDQ
- hdu 5317 RGCDQ(dp)
- HDU 5317 RGCDQ
- [素筛] hdu 5317 RGCDQ
- hdu 5317 RGCDQ
- hdu 5317 RGCDQ
- 链表的实现
- 使用HTML编写简单的邮件模版
- c语言基础(一)
- 查看端口占用情况并结束进程
- hibernate.properties与hibernate.cfg.xml区别
- HDU 5317 RGCDQ
- mysql中修改字段名主键等 部分操作
- 百度之星2015资格赛 IP聚合
- html5处理图像-像素处理
- 内部类
- android选取本地图片及关于图片压缩上传问题
- 23种设计模式(6):模版方法模式
- Communicating with Other Fragments
- 记忆篇