解题报告 之 HDU5317 RGCDQ


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 (RGCDQ). What’s RGCDQ? Please let me explain it to you
gradually. For a positive integer x, F(x) indicates the number of kind of prime factor of x. For example F(2)=1. F(10)=2, because 10=2*5. F(12)=2, because 12=2*2*3, there are two kinds of prime factor. For each query, we will get an interval [L, R], Hdu wants
to know 

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style=""> 

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

rev=2.4-beta-2" alt="" style="">

 

Input

There are multiple queries. In the first line of the input file there is an integer T indicates the number of queries. 

In the next T lines, each line contains L, R which is mentioned above. 



All input items are integers. 

1<= T <= 1000000 

2<=L < R<=1000000 
 

Output

For each query,output the answer in a single line. 

See the sample for more details. 
 

Sample Input

2
2 3
3 5
 

Sample Output

1
1

题目大意:首先定义F(x)为 x 的质因子的种类数,比方20=2*2*5,那么F(x)=2 。如今给出区间[L,R],问你该区间内中随意两个数的GCD的最大值是多少?

分析:首先无论是不是一開始就想到要怎么做,肯定要完毕的是把每一个数的F(x)求出来,这里非常自然的想到了筛法。

对于每一个质数,它的每一个倍数的质因子数都++。然后扫一遍之后就完毕了F(x)的更新。筛法详细见相关文章一。


好筛完了F(x),那么怎么求最大的GCD呢。一開始发现肯定不能暴力来,所以纠结了一会儿。然后后来看调试发现F(x)的值全都是1,2,3,4。。。这样的小数。然后统计出来一看最大的F(x)才仅仅有7。那么这个问题就迎刃而解了。直接扫一遍更新到R为止每种F(x)有多少个。然后区间给定之后依次推断各种情形就可以。


上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; typedef long long ll;
const int MAXN = 1e6 + 10; int isprime[MAXN];
int f[MAXN];
int dis[MAXN][8]; void ini()
{
memset( isprime, -1, sizeof isprime );
memset( f, 0, sizeof f );
memset( dis, 0, sizeof dis ); for(int i = 2; i < MAXN; i++)
{
if(!isprime[i]) continue;
for(int j = i; j < MAXN; j += i)
{
f[j]++;
isprime[j] = 0;
}
} for(int i = 2; i < MAXN; i++)
{
for(int j = 1; j <= 7; j++)
{
dis[i][j] = dis[i - 1][j];
}
dis[i][f[i]]++;
} } int main()
{
ini();
int kase;
scanf( "%d", &kase ); while(kase--)
{
int l, r;
scanf( "%d%d", &l, &r ); int ma = 0;
for(int i = 7; i >= 2;i--)
{
if(dis[r][i] - dis[l - 1][i] >= 2)
{
ma = i;
break;
}
} if(dis[r][6] - dis[l - 1][6] >= 1 && dis[r][2] - dis[l - 1][2] >= 1)
{
ma = max( ma, 3 );
} if(dis[r][6] - dis[l - 1][6] >= 1 && dis[r][3] - dis[l - 1][3] >= 1|| dis[r][4] - dis[l - 1][4] >= 1 && dis[r][2] - dis[l - 1][2] >= 1)
{
ma = max( ma, 2 );
} ma = max( ma, 1 );
printf( "%d\n", ma ); }
return 0;
}

解题报告 之 HDU5317 RGCDQ的更多相关文章

  1. hdu5317 RGCDQ 统计

    // hdu5317 RGCDQ // // 题目大意: // // 给定一个闭区间[l,r],定义f(x)是x的不同的质因子的个数 // 比方: 12 = 2 * 2 * 3,是两种.所以f(x) ...

  2. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  3. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  4. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  5. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  6. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  7. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  8. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  9. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. python2.7编码与解码

    常见的编码 ASCII: 美国人发明的,只编码英文字母和符号,1个字节. GB2312: 中国人发明的,增加了中文汉字和符号,2个字节. Unicode: 为了把所有语言都统一到一套编码里,一般是2个 ...

  2. IOS-2-C语言和Objective-C语言衔接学习资料

    前言:在IOS学习中.通常会先学习一周的C语言,两周的Objective-C语言,这是今后开发的最基础最重要的部分,以下给大家分享一下培训课上的精简资料: C语言和Objective-C语言衔接学习资 ...

  3. Chromium网页输入事件捕捉和手势检測过程分析

    连续的输入事件可能会产生一定的手势操作.比如滑动手势和捏合手势. 在Chromium中,网页的输入事件是在Browser进程中捕捉的.Browser进程捕获输入事件之后,会进行手势操作检測.检測出来的 ...

  4. POJ1274 The Perfect Stall 二分图,匈牙利算法

    N头牛,M个畜栏,每头牛仅仅喜欢当中的某几个畜栏,可是一个畜栏仅仅能有一仅仅牛拥有,问最多能够有多少仅仅牛拥有畜栏. 典型的指派型问题,用二分图匹配来做,求最大二分图匹配能够用最大流算法,也能够用匈牙 ...

  5. 锋利Jquery 第一天

    之前一直学习,现在终于有时间来整理一下文档了. 以下文章都是自己学习Jquery 的笔记, 希望能留下痕迹,也希望能帮助到您. 好了开始我的Jquery第一天. 我也是从Hello  wrod!开始的 ...

  6. 原生js实现复选框

    简单排版 <style> .box { display: flex; align-items: center; } #allSelect, p { width: 20px; height: ...

  7. checkbox复选框和div click事件重叠,点击div后复选框也被选中,同时改变div颜色,否则则不选中

     checkbox复选框和div click事件重叠,点击div后复选框也被选中,同时改变div颜色,否则则不选中 <!DOCTYPE html> <html lang=" ...

  8. .NET平台开源JSON序列化

    转载: http://blog.csdn.net/ddgweb/article/details/39643747 一个简单示例: String str = "{’name’:’cyf’,’i ...

  9. P1888 三角函数

    题目描述 输入一组勾股数a,b,c(a≠b≠c),用分数格式输出其较小锐角的正弦值.(要求约分.) 输入输出格式 输入格式: 一行,包含三个数,即勾股数a,b,c(无大小顺序). 输出格式: 一行,包 ...

  10. Android中的事件分发机制

    Android中的事件分发机制 作者:丁明祥 邮箱:2780087178@qq.com 这篇文章这周之内尽量写完 参考资料: Android事件分发机制完全解析,带你从源码的角度彻底理解(上) And ...