hdu5317&15年hdu多校集训(3)b题
2015-07-31 00:22
344 查看
题目大意:有x<1000000,定义f(x),为它的素数因子,现在给你个区间,让你找出区间里边gcd(f(x1),f(x2))最大的数,其中x1,x2,在区间内
解题思路:预处理一下即可,不要用整数唯一分解定理,要超时,一个一个加着来看;
解题思路:预处理一下即可,不要用整数唯一分解定理,要超时,一个一个加着来看;
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const int maxn=1000000+10; int L,R,T; int F[maxn],s[maxn][8]; int main() { //freopen("1002.in","r",stdin); // freopen("1002.out","w",stdout); int k,p,flag; memset(F,0,sizeof(F)); k = 2; while (1) { p = k; while (p <=1000000) { F[p]++; p += k; } p = k + 1; flag = 0; while (p <= 100000) { if (!F[p]) { k = p; flag = 1; break; } p++; } if (!flag) break; } memset(s,0,sizeof(s)); for (int i = 2; i <= 1000000; i++) { for (int j = 1; j < 8; j++) { s[i][j] =s[i - 1][j]; if (j == F[i]) s[i][j]++; } } scanf("%d",&T); while(T--) { scanf("%d %d",&L,&R); int cnt[8]; memset(cnt,0,sizeof(cnt)); for(int i=1;i<=7;i++) { cnt[i]=s[R][i]-s[L-1][i]; } int ans=1; if(cnt[2]+cnt[4]+cnt[6]>=2) ans=2; if(cnt[3]+cnt[6]>=2) ans=3; if(cnt[4] >= 2) ans = 4; if(cnt[5] >= 2) ans= 5; if(cnt[6] >= 2) ans= 6; if(cnt[7] >= 2) ans= 7; printf("%d\n", ans); } }
相关文章推荐
- Android ImageView的scaleType属性与adjustViewBounds属性
- C++语言中随机数的使用
- 07月30日 星期四
- linux上的常见命令掌握
- ActionBar、ActionMode样式设定解析
- 最短路径之迪杰斯特拉(Dijkstra)算法
- Swift入门(四)——可选类型(Optionals)与断言(Assert)
- windows10的第一天使用总结
- csharp: Export or Import excel using MyXls
- python __new__以及__init__
- RAC的坑
- SSH学习 Hibernate 多对多
- Android开发基础之AlertDialog的列表对话框的使用
- HttpClient结合Struts2开发移动应用后台
- csharp: Export or Import excel using MyXls
- Leetcode# 148 Sort List
- java中打印数组的5种方法
- javaweb写的在线聊天应用
- 给Vmware进行硬盘(分区)无损扩容 (linux)
- Arctic Network (POJ 2349)