
uva10200——前缀和+质数判定
预处理阶段:我们预先计算每个 ( n ) 从 0 到 10000 时,( n^2 + n + 41 ) 是否为质数,并记录下来。使用前缀和数组 判断质数:使用试除法来判断一个数是否为质数。通过预先计算,我们可以在常数时间内得到结果。 查询处理:对于每个查询,使用预处理好的前缀和数组快速计算区间内的质数个数和总数,进而计算百分比。 预处理阶段:函数 质数判断:使用试除法判断一个数是否为质数,优化了判断过程,特别是通过跳过偶数和3的倍数来减少计算量。 查询处理:对于每个输入的区间 ([a, b]),使用预处理好的前缀和数组快速计算质数个数和总数,计算出质数的百分比,并输出结果。
发布日期:2021-05-18 06:05:29
浏览次数:20
分类:精选文章
本文共 1732 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要计算Euler公式 ( n^2 + n + 41 ) 在给定区间 ([a, b]) 内生成的质数的百分比。为了高效处理这个问题,我们可以预先计算每个数 ( n ) 是否生成质数,然后在查询时快速统计结果。
方法思路
sum
,其中 sum[i]
表示从 0 到 i 的数中生成质数的个数。解决代码
#include#include #include using namespace std;const int maxn = 10000 + 5;int sum[maxn + 1];void init_sum() { sum[0] = 1; for (int i = 1; i <= maxn; ++i) { int x = i * i + i + 41; if (x <= 1) { sum[i] = sum[i - 1]; continue; } bool is_prime = true; if (x % 2 == 0 || x % 3 == 0) { is_prime = false; } else { for (int j = 5; j * j <= x; j += 6) { if (x % j == 0 || x % (j + 2) == 0) { is_prime = false; break; } } } sum[i] = is_prime ? sum[i - 1] + 1 : sum[i - 1]; }}int main() { init_sum(); while (true) { long long a, b; if (scanf("%lld%lld", &a, &b) != 2) { break; } if (a > b) { a = b; } long long count = sum[b]; if (a > 0) { count -= sum[a - 1]; } long long total = b - a + 1; double percent = (count * 100.0) / total; percent = round(percent * 100.0) / 100.0; printf("%.2f\n", percent); } return 0;}
代码解释
init_sum
计算每个 ( n )(从 0 到 10000)时,( n^2 + n + 41 ) 是否为质数,并记录在数组 sum
中。这种方法通过预处理阶段将时间复杂度降低到常数时间,确保了在处理大量查询时的高效性。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年05月09日 10时03分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
04_Mysql配置文件(重要参数)
2019-03-06
JavaSE总结
2019-03-06
手动造轮子——基于.NetCore的RPC框架DotNetCoreRpc
2019-03-06
Python IO编程
2019-03-06
CSS入门总结
2019-03-06
使用 TortoiseGit 时,报 Access denied 错误
2019-03-06
基于 HTML5 WebGL 的污水处理厂泵站自控系统
2019-03-06
django-表单之模型表单渲染(六)
2019-03-06
c++之程序流程控制
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
李笑来必读书籍整理
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07