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 题意: 给你一个偶数,问你这个偶数有多少种方式能由两个不同的素数构成 ...
随机推荐
- 并发编程(二):全视角解析volatile
一.目录 1.引入话题-发散思考 2.volatile深度解析 3.解决volatile原子性问题 4.volatile应用场景 二.引入话题-发散思考 public class T1 { /*vol ...
- USBDM Debugger interface for Freescale RS08,HCS08,HCS12,Coldfire and ARM-Kinetis Devices.
Introduction USBDM is a debugger hardware interface for a range of Freescale microcontrollers. It is ...
- 《Go语言实战》摘录:6.2 并发 - goroutine
6.2 goroutine
- WCF消息传递
通过了解了WCF的一些基本概念并创建和编写WCF应用中的相应方法,实现了WCF服务和客户端之间的调用,就能够理解WCF应用是如何进行通信的.了解了一些基本的WCF概念后,还需要深入了解WCF消息的概念 ...
- javascript:Array.prototype.slice.call(arguments)
我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js ...
- Android按键添加和处理的方案
Android按键添加和处理的方案 版本号 说明 作者 日期 1.0 Android按键添加和处理的方案 Sky Wang 2013/06/18 需求:Android机器上有个W ...
- FieldExists
import arcpy import os import sys def FieldExists(TableName,FieldName): desc = arcpy.Describe(TableN ...
- 【k8s】centos上安装kubernetes,报错Error:docker-ce-cli conflicts with 2:docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
使用命令: yum install kubernetes 报错: Error: docker-ce-cli conflicts with :docker--.git07f3374.el7.centos ...
- MySql错误处理(二) - Condition & Handle
20.2.10. 条件和处理程序 20.2.10.1. DECLARE条件 20.2.10.2. DECLARE处理程序 特定条件需要特定处理.这些条件可以联系到错误,以及子程序中的一般流程控制. 2 ...
- java.util.ConcurrentModificationException解决详解
异常产生 当我们迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素),可能会抛出java.util.ConcurrentModificationExceptio ...