HDU 4548 美素数 素数题解
本题就是能够直接打表的,推断能否够打表也须要技巧的:
1 推断最大的数值为1000000。百万下面的数打表都是能够的
2 能够线性预处理好。使用素数筛子法是能够接近线性预处理的。
故此能够打表了。
须要熟悉的基本知识点:
1 素数筛子法 - 一两分钟之内写出代码
2 一般素数推断法,由于位数相加之后的数值很小,故此一般素数推断就能够了,假设写个primality test 算法会大材小用了。
3 然后是带点动态规划法的思想把前面的美素数叠加起来,方便查找。
算是基础题目了,也是有人说的水题,我还是喜欢叫基础题吧。
难在于推断好,并运用好这些基础知识。简单优雅地解决,写出代码。
#include <stdio.h>
#include <string.h> const int MAX_N = 1000001;
bool isPrime(int n)
{
if (n == 2) return true;
for (int r = 2; r * r <= n; r++)
{
if (n % r == 0) return false;
}
return true;
} bool isMeiPrime(int n)
{
int d = 0;
while (n)
{
d += n % 10;
n /= 10;
}
return isPrime(d);
} int primeNums[MAX_N];
bool primes[MAX_N]; void seive()
{
memset(primes, 0, MAX_N * sizeof(bool));
for (int i = 2; i < MAX_N; i++)
{
if (!primes[i])
{
for (int j = i << 1; j < MAX_N; j += i)
{
primes[j] = true;
}
}
} primeNums[0] = 0, primeNums[1] = 0;
for (int i = 2; i < MAX_N; i++)
{
if (!primes[i] && isMeiPrime(i)) primeNums[i] = primeNums[i-1] + 1;
else primeNums[i] = primeNums[i-1];
}
} int main()
{
seive();
int T, a, b;
scanf("%d", &T);
for (int t = 1; t <= T; t++)
{
scanf("%d %d", &a, &b);
printf("Case #%d: %d\n", t, primeNums[b] - primeNums[a-1]);
}
return 0;
}
HDU 4548 美素数 素数题解的更多相关文章
- HDU 4548 美素数(打表)
HDU 4548 美素数(打表)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88159#problem/H 题目 ...
- HDU 4548 美素数 在线打表加数状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4548 解题报告:一开始本想先打个素数表,然后每次输入L 跟R 的时候都进行暴力判断,但这题测试数据太多 ...
- HDU 4548 美素数
Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“ ...
- HDU 4548(美素数)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 小明对数的 ...
- hdu 4548 美素数 超级大水题
美素数 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...
- hdu 4548 筛法求素数 打表
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4548 Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题 ...
- 数学#素数筛法 HDU 4548&POJ 2689
找素数本来是很简单的问题,但当数据变大时,用朴素思想来找素数想必是会超时的,所以用素数筛法. 素数筛法 打表伪代码(用prime数组保存区间内的所有素数): void isPrime() vis[]数 ...
- HDU 2098 分拆素数和
HDU 2098 分拆素数和 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768K (Java/Others) [题目描述 ...
- HDU 2098 分拆素数和(素数)
HDU 2098 分拆素数和(素数) http://acm.hdu.edu.cn/showproblem.php?pid=2098 题意: 给你一个偶数,问你这个偶数有多少种方式能由两个不同的素数构成 ...
随机推荐
- 20172319 2018.10.12《Java程序设计教程》第6周课堂实践(补写博客)
20172319 2018.10.12 <Java程序设计教程>第6周课堂测验 课程:<程序设计与数据结构> 班级:1723 学生:唐才铭 学号:20172319 指导老师:王 ...
- Codeforces Round #369 (Div. 2) E. ZS and The Birthday Paradox 数学
E. ZS and The Birthday Paradox 题目连接: http://www.codeforces.com/contest/711/problem/E Description ZS ...
- CentOS下KVM增加磁盘/磁盘扩容/在线扩容
一.磁盘镜像操作(适用于raw和qcow2格式) 1.创建镜像 qemu-img create -f qcow2(格式) /kvm/centos1_1.qcow2(路径) 5G(容量) 2.修改镜像容 ...
- SOC 与 ARM
SOC是指片上系统,意思是一个芯片就构成一个包括了存储.CPU.甚至还有AD.UART等等其他资源的系统!而ARM只是CPU的一种,有的片上系统是51.nios.PIC.等等不一而是!特别是nios, ...
- myeclipse和eclipse的区别和联系,以及版本间的对应关系
Eclipse:IBM花了4千万美金来开发这个IDE(Integrated Development Environment).第一版1.0在2001年11月释出,随后逐渐受到欢迎.Eclipse已经成 ...
- AngularJS的Hello World
本篇体验AngularJS的Hello World,虽然简单,但体现了AnuglarJS的一些重要概念. 大致思路是这样的: ● 通常通过为hmtl元素添加AngularJS独有的属性来实现一些功能, ...
- 使用Axure RP原型设计实践02,自定义部件以及熟悉与部件相关面板
本篇体验在Axure中自定义部件,并熟悉Widget Interations and Notes面板,Widget Properties and Style面板,Widget Manager面板. 在 ...
- 在Visual Studio中使用用例图描述系统与参与者间的关系
"用例图"用来描述谁用系统,用系统做什么.用例图不涉及使用细节,只用来描述使用人员和系统的关系,也不涉及行动的顺序.一起来体验. 使用Visual Studio 2012创建解决方 ...
- 【Centos】centos查看磁盘使用情况
1.查看分区和磁盘 lsblk 查看分区和磁盘 2.查看空间使用情况 df -h 查看空间使用情况 3.分区工具查看分区信息 fdisk -l 分区工具查看分区信息 4.查看分区 cfdisk /de ...
- HttpSession javax.servlet.http.HttpServletRequest.getSession(boolean arg0)理解
request.getSession()和request.getSession(true)意思相同:获取session,如果session不存在,就新建一个 reqeust.getSession(fa ...