hdoj 5317 RGCDQ

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317

 1     #include<stdio.h>
 2
 3     const int MAXN = 1000010;
 4     int F[MAXN];
 5     bool flag[MAXN];
 6     int S[8][MAXN];
 7
 8     void init(){
 9         //对数据进行初始化
10         for(int i = 2; i <= MAXN ; ++i)
11         if(!flag[i]){
12             F[i]++;
13             for(int j = i * 2; j <= MAXN; j += i ){
14                 flag[j] = true;
15                 F[j]++;
16             }
17         }
18         //进行筛选,素数F值为1,其余数看其质因数种类数
19         for(int i = 2; i <= MAXN ; ++i){
20             for(int j = 1; j <= 7; ++j){
21                 S[j][i] = S[j][i-1] + ( F[i] == j );
22             }
23         }
24         //由数据范围可知,F的值不超过7,通过动态规划计算每一个值在每一个位置对应的个数
25     }
26     int main()
27     {
28         int T;
29         int l, r;
30         int cnt[8];
31         init();
32         scanf("%d",&T);
33         while(T-->0){
34             int ans = 1;
35             scanf("%d%d",&l,&r);
36             for( int i = 1; i <= 7; ++i){
37                 cnt[i] = S[i][r] - S[i][l-1];
38 //                printf("%d %d ",i,cnt[i]);
39             }
40             //统计个数
41             if(cnt[2]+cnt[4]+cnt[6]>=2)
42                 ans = 2;
43             if(cnt[3]+cnt[6]>=2)
44                 ans = 3;
45             if(cnt[4]>=2)
46                 ans = 4;
47             if(cnt[5]>=2)
48                 ans = 5;
49             if(cnt[6]>=2)
50                 ans = 6;
51             if(cnt[7]>=2)
52                 ans = 7;
53             printf("%d\n",ans);
54         }
55
56     }
57     ///总结:先分析数据范围,读清题目,简化过程
58     ///对于T较多的情况,可以先初始化
时间: 2024-10-09 15:29:25

hdoj 5317 RGCDQ的相关文章

数学+dp HDOJ 5317 RGCDQ

题目传送门 1 /* 2 题意:给一个区间,问任意两个数的素数因子的GCD最大 3 数学+dp:预处理出f[i],发现f[i] <= 7,那么用dp[i][j] 记录前i个f[]个数为j的数有几个, 4 dp[r][j] - dp[l-1][j]表示区间内j的个数,情况不多,分类讨论一下 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <vecto

HDOJ 5317 RGCDQ 水

预处理出每个数有多少个不同的因数,因数最多不超过7 RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 641    Accepted Submission(s): 304 Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He

2015 HDU 多校联赛 5317 RGCDQ 筛法求解

2015 HDU 多校联赛 5317 RGCDQ 筛法求解 题目  http://acm.hdu.edu.cn/showproblem.php? pid=5317 本题的数据量非常大,測试样例多.数据量大, 所以必须做预处理.也就是用筛法求出全部的F[x],将全部F[x] 打印出来发现.事实上结果不大,最大的数值是7.所以对于每一个区间询问, 直接暴力求取有多少个 1 2 3 4 5 6 7 就可以,从大到小查找.假设出现2个以上 3-7 的数值,那么最大公约数就是该数字. 假设没有出现两个反复

HDU 5317 RGCDQ (合数分解+预处理)

题目链接:HDU 5317 RGCDQ 题意:定义函数F(x)为x的不同的素因子且小于等于x的个数,询问[l,r]区间中gcd(F(i),F(j))的最大值. 思路:暴力预处理出所有的合数分解结果,发现F(x)最大也只有7,之后就是暴力求出所有1到7出现次数的前缀和.询问的时候就打到O(1)了. AC代码: #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #

hdu 5317 RGCDQ 筛法+线段树解法

RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 299    Accepted Submission(s): 151 Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and mor

HDU 5317 RGCDQ(素数个数 多校2015啊)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317 Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and more interesting things about GCD. Today He comes up with Range Greatest Common Divisor Query (R

HDU 5317 RGCDQ

RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 323    Accepted Submission(s): 162 Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and mo

hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317 题意:F(x) 表示x的不同质因子的个数结果是求L,R区间中最大的gcd( F(i) , F(j) ),i.j在L,R区间内. 思路:因为2<=L < R<=1000000,所以他们的质因子最多的个数也就7个,也就是说1<=F(x)<=7,因为要求最大的GCD,所以只要知道在L,R区间内每个F(x)的情况就可以知道结果. 代码: 1 #include <stdio.h

hdu 5317 RGCDQ 多校 思维题

点击打开链接题目链接 RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 328    Accepted Submission(s): 164 Problem Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find