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 的数值,那么最大公约数就是该数字。

假设没有出现两个反复的。那么结果要么是 3 (3,6) 要么是 2 (2,4)。 (4。 6), (2,6) 。假设都不是。那么就是 1。

我认为本题主要难点在筛法求F[x] 上。

#include <bits/stdc++.h>

using namespace std;

const int MAX = 1000000+2;
bool vis[MAX];
int f[MAX];
int s[8][MAX]; inline void init() // O(nlngn)
{
// 素数筛法 获取 f(x)
for(int i=2; i<MAX; ++i)
{
if (!vis[i]) // 没有被筛去
{
f[i]++; // 自身是素数,自增 // 筛去i的倍数。 同一时候将f[i的倍数]++。由于i的倍数值,肯定含有i 这个质因子
for(int j=i+i; j<MAX; j+=i)
{
f[j]++;
vis[j] = true; // 筛去
}
}
} // 统计区间 2-i 各有多少个 1 2 3 4 5 6 7
for(int i=2; i<MAX; ++i)
{
for(int j=1; j<=7; ++j)
{
s[j][i] = s[j][i-1]; // 取上一次的结果
if (f[i] == j) // 当前值能够进行累加
s[j][i]++;
}
}
} inline int getMaxGCD(int l, int r)
{
int arr[8] = {};
for(int i=1; i<=7; ++i)
{
arr[i] = s[i][r] - s[i][l-1];
} // 是否有2个以上的情况
for(int i=7; i>2; --i)
{
if (arr[i] >= 2)
return i;
} // 处理单个的情况
if (arr[3]+arr[6] >= 2)
return 3; if (arr[2]+arr[4]+arr[6] >= 2)
return 2; return 1;
} int main(void)
{
//freopen("in.txt", "r", stdin); init(); int t = 0;
scanf("%d", &t);
while(t--)
{
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", getMaxGCD(l, r));
} return 0;
}

另外在杭电上。也有一道类似的题目, 主要考察筛法。

题目  http://acm.hdu.edu.cn/showproblem.php?pid=1215

// 数据量特别大,一定要做预处理

#include <bits/stdc++.h>

using namespace std;

const int MAX = 500000+2;
int ans[MAX] = {}; inline void init()
{
ans[1] = 1;
for(int i=2; i<MAX; ++i)
{
ans[i]++;
for(int j=i+i; j<MAX; j+=i)
{
ans[j] += i;
}
}
} int main(void)
{
//freopen("in.txt", "r", stdin); init(); int t, n;
cin>>t;
while(t--)
{
scanf("%d", &n);
printf("%d\n", ans[n]);
} return 0;
}

測试用例数量非常大且数据量大的时候。应该做预处理

2015 HDU 多校联赛 5317 RGCDQ 筛法求解的更多相关文章

  1. 2015 HDU 多校联赛 5363 Key Set

    2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...

  2. 数学+dp HDOJ 5317 RGCDQ

    题目传送门 /* 题意:给一个区间,问任意两个数的素数因子的GCD最大 数学+dp:预处理出f[i],发现f[i] <= 7,那么用dp[i][j] 记录前i个f[]个数为j的数有几个, dp[ ...

  3. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  4. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  5. [HDU多校]Ridiculous Netizens

    [HDU多校]Ridiculous Netizens 点分治 分成两个部分:对某一点P,连通块经过P或不经过P. 经过P采用树形依赖背包 不经过P的部分递归计算 树型依赖背包 v点必须由其父亲u点转移 ...

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

    题目链接:pid=5317" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=5317 Prob ...

  7. 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 ...

  8. HDU OJ 5317 RGCDQ( 2015多校联合训练第3场) 暴力打表+小技巧

    题目连接:Click here 题意:在一个[L,R]内找到最大的gcd(f[i],f[j])其中L<=i<j<=R,f[x]表示i分解质因数后因子的种类数.eg:f[10]=2(1 ...

  9. 2015 Multi-University Training Contest 3 hdu 5317 RGCDQ

    RGCDQ Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

随机推荐

  1. 升级struts到2.5.2遇到的问题及解决方案

    原来的版本是2.3.x,由于安全原因需要升级到2.5.2.1,2.5.2版本不再提供xwork.jar ,整合到了 struts-core包中. 2,方法不能访问的问题,需要在每个action配置文件 ...

  2. easyui select 下拉框的取值和赋值

    1.取值 //拍卖管理中示例 function serializeForm(form) { var obj = { auclotType : $('#auclotType').val(), goods ...

  3. Java 模拟新浪登录 2016

    想学习一下网络爬虫.涉及到模拟登录,查阅了一番资料以后发现大部分都有点过时了,就使用前辈们给的经验,Firefox抓包调试,採用httpclient模拟了一下新浪登录. 不正确之处多多包括.须要的能够 ...

  4. django cookie and session

    cookie和session 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie的工作 ...

  5. ViewPager Fragment PagerAdapter MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  6. java学习笔记16--I/O流和文件

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理 ...

  7. SVM训练结果参数说明 训练参数说明 归一化加快速度和提升准确率 归一化还原

    原文:http://blog.sina.com.cn/s/blog_57a1cae80101bit5.html 举例说明 svmtrain -s 0 -?c 1000 -t 1 -g 1 -r 1 - ...

  8. (笔试题)质数因子Prime Factor

    题目: Given any positive integer N, you are supposed to find all of its prime factors, and write them ...

  9. URL转发

    原理:iframe 代码: <?php if($_SERVER['HTTP_HOST']=="i.mansions.com.cn"){ $html = <<< ...

  10. 【转载】AngularJS监听路由变化

    一.Angular 路由状态发生改变时可以通过' $stateChangeStart '.' $stateChangeSuccess '.' $stateChangeError '监听,通过注入'$l ...