B - RGCDQ-HDU 5317-素数筛法
来源:互联网 发布:gta5画面设置优化 编辑:程序博客网 时间:2024/05/20 07:19
题意 f(x)是x能分解成的素数的种类,
http://acm.hdu.edu.cn/showproblem.php?pid=5317
先打素数表,再用素数筛选出每个数的种类
接下来 求任意区间的 元素对应的f(x)的最大公约数,----队友读漏了gcd,以为是求区间最大值,拍了个线段树-无用功....
因为答案显然 只有1 2 3 4 5 6 7...所以预处理记下左端到每个数字间有多少个1 2 3 4 5 6 7,即可,然后对区间[a,b]记录的1 2 3 4 5 6 7个数相减,即可得到区间之间有多少个1 2 3 4 5,然后判断一下就好
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#include <iostream>#include <queue>#include <set>#include <vector>#define MAX 1000005#define inf 0x3f3f3f3fusing namespace std;#define tree_size MAX*3int max(int a,int b){if (a<b)return b;return a;};bool f[1000500]; int ans[1000500]; int yue[1000500][8]; int main(){//素数打表 __int64 i,j;f[1]=true;for (i=2;i<=MAX;i++) //1处{if (f[i]==false) //优化{for (j=(__int64)i*i;j<=1000500;j=j+i) // 如果1处用1000必须_int64强制转换{f[j]=true;}}} for (i=2;i<=MAX;i++) //1处{if (f[i]==false){for (j=i;j<=MAX;j=j+i){ans[j]++;} } }for (i=1;i<=1000000;i++){for (j=1;j<=7;j++)yue[i][j]=yue[i-1][j];yue[i][ans[i]]++;}int l,t,a,b;scanf("%d",&t); while(t--) {scanf("%d%d",&a,&b);int flag=0;for (j=7;j>=3;j--){int tmp=yue[b][j]-yue[a-1][j];if (tmp>=2){printf("%d\n",j);flag=1;break;}}if (flag) continue;int t1=yue[b][6]-yue[a-1][6];int t2=yue[b][3]-yue[a-1][3];if (t1+t2>=2) {printf("3\n"); continue;}else{t1=yue[b][2]-yue[a-1][2];t2=yue[b][4]-yue[a-1][4];int t3=yue[b][6]-yue[a-1][6];if (t1+t2+t3>=2){ printf("2\n");continue; }elseprintf("1\n");} }return 0;}
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdio>#include <algorithm>#include <iostream>#include <queue>#include <set>#include <vector>#define MAX 1000005#define inf 0x3f3f3f3fusing namespace std;#define tree_size MAX*3int max(int a,int b){if (a<b)return b;return a;};bool f[1000500]; int ans[1000500]; int yue[1000500][8]; int main(){//素数打表 __int64 i,j;f[1]=true;for (i=2;i<=MAX;i++) //1处{if (f[i]==false) //优化{for (j=(__int64)i*i;j<=1000500;j=j+i) // 如果1处用1000必须_int64强制转换{f[j]=true;}}} for (i=2;i<=MAX;i++) //1处{if (f[i]==false){for (j=i;j<=MAX;j=j+i){ans[j]++;} } }for (i=1;i<=1000000;i++){for (j=1;j<=7;j++)yue[i][j]=yue[i-1][j];yue[i][ans[i]]++;}int l,t,a,b;scanf("%d",&t); while(t--) {scanf("%d%d",&a,&b);int flag=0;for (j=7;j>=3;j--){int tmp=yue[b][j]-yue[a-1][j];if (tmp>=2){printf("%d\n",j);flag=1;break;}}if (flag) continue;int t1=yue[b][6]-yue[a-1][6];int t2=yue[b][3]-yue[a-1][3];if (t1+t2>=2) {printf("3\n"); continue;}else{t1=yue[b][2]-yue[a-1][2];t2=yue[b][4]-yue[a-1][4];int t3=yue[b][6]-yue[a-1][6];if (t1+t2+t3>=2){ printf("2\n");continue; }elseprintf("1\n");} }return 0;}
0 0
- B - RGCDQ-HDU 5317-素数筛法
- hdu 5317 RGCDQ(素数筛选法+前缀和)
- 多校第三场 1002 hdu 5317 RGCDQ (筛素数+前缀和)
- HDU 5317 RGCDQ(素数个数 多校2015啊)
- 2015 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
- java.lang.ClassNotFoundException: com.sun.mail.util.MessageRemovedIOException
- Grand Central Dispatch 基础教程:Part 2/2
- HDU2.1.8 小数化分数2
- undefined reference to ...... @GLIBCXX
- ibatis的queyrForList和queryForMap区别
- B - RGCDQ-HDU 5317-素数筛法
- poj1102+每个数字有七笔画每行扫描+注意细节每个样例后要有两个回车
- mac下显示和隐藏隐藏文件
- DZY Loves Chessboard (周赛2)
- 推荐几个机器学习算法及应用领域相关的中国大牛
- 创业要趁早
- Connection timed out: connect
- List<>与数组[]转换
- Java加密与解密的艺术-读书笔记3-4章