POJ 3292 Semi-prime H-numbers (素数筛法变形)

时间:2022-02-04 11:05:16

  题意:题目比较容易混淆,要搞清楚一点,这里面所有的定义都是在4×k+1(k>=0)这个封闭的集合而言的,不要跟我们常用的自然数集混淆。

  题目要求我们计算 H-semi-primes, H-semi-primes是 两个H-primes的乘积, H-primes的定义为:在这个集合中只能由1和它本来相乘得来,并且1不是 H-primes;

  分析:这个题目我一开始是想打表记录一下的,但是没有筛法的效率,数据量过大,程序崩溃了(连超时的机会都不给我),看了多个别人的做法才知道,这个题目考查的是对于素数筛法,我们需要对素数筛法有一些变形。和正常筛法是不太一样的,这个有三种数,H-semi-primes,H-primes, H-composite,这三种数我们需要给他们标上不同的号,而且必须是不同的号,否则筛法会出错误,最后题目问的是(1,h)之间有多少个,我们应该使用一个数组记录这个答案,以便打表以后在o(1)的复杂度就找到答案。

  注意:可能有人感觉会有漏解,其实不会,有人可能会担心这一点,类似这样,5×25怎么办? 但是25的标记一定不是0,25在5×5的时候就被标记了1,我们在后面能遇到的能被两个数乘积表达的数,在以前的时候就肯定已经被表达出来,并且标记过了。

  感悟:感觉素数筛法好神奇,它的变形好巧妙,好精美。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxn 1000001
int prime[maxn+];
int ans[maxn+];
void make(){
memset(prime,,sizeof(prime));
///H—prime 标记为 0
for(int i = ;i <= maxn;i += ){
for(int j = ;j <= maxn;j += ){
if(i*j > maxn) break;
if(prime[i]== && prime[j]==)///这个判断0的充要条件就是题目中给的要求,只能是两个H-prime
///任意一个为1或者2都不可以
prime[i*j] = ;///H-semi-primes标记为1;
else prime[i*j] = ;/// H-composites必须为2或者其他
}
}
}
void get_ans(){
int tot = ;
for(int i = ;i <= maxn;i++){
if(prime[i] == ) tot++;///don't forget prime[i] shoule only be 1;
ans[i] = tot;
}
}
int main(){
int h;
make();
get_ans();
while(~scanf("%d",&h)){
if(!h) break;
printf("%d %d\n",h,ans[h]);
}
return ;
}

POJ 3292 Semi-prime H-numbers (素数筛法变形)的更多相关文章

  1. hdu-2136 Largest prime factor---巧用素数筛法

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2136 题目大意: 每个素数在素数表中都有一个序号,设1的序号为0,则2的序号为1,3的序号为2,5的 ...

  2. POJ 3126:Prime Path(素数&plus;BFS)

    The ministers of the cabinet were quite upset by the message from the Chief of Security stating that ...

  3. POJ-2689 Prime Distance&comma;区间素数筛法

                                                    Prime Distance 只会埃氏筛法的弱鸡今天读了读挑战程序设计120页,明白了求小区间内素数的方 ...

  4. POJ 2739 Sum of Consecutive Prime Numbers&lpar;素数&rpar;

    POJ 2739 Sum of Consecutive Prime Numbers(素数) http://poj.org/problem? id=2739 题意: 给你一个10000以内的自然数X.然 ...

  5. 【Aizu - ALDS1&lowbar;1&lowbar;C】Prime Numbers(素数筛法)

    Prime Numbers  Descriptions: A prime number is a natural number which has exactly two distinct natur ...

  6. 数学&num;素数筛法 HDU 4548&amp&semi;POJ 2689

    找素数本来是很简单的问题,但当数据变大时,用朴素思想来找素数想必是会超时的,所以用素数筛法. 素数筛法 打表伪代码(用prime数组保存区间内的所有素数): void isPrime() vis[]数 ...

  7. POJ 3126 Prime Path(素数路径)

    POJ 3126 Prime Path(素数路径) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 The minister ...

  8. poj 3126 Prime Path&lpar; bfs &plus; 素数&rpar;

    题目:http://poj.org/problem?id=3126 题意:给定两个四位数,求从前一个数变到后一个数最少需要几步,改变的原则是每次只能改变某一位上的一个数,而且每次改变得到的必须是一个素 ...

  9. 素数筛法--SPOJ Problem 2 Prime Generator

    质数(prime number)又称素数,除了1和它本身外,不能整除以其他自然数,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.最小的质数是2. 要判断一个整数N是不是质数很简单, ...

随机推荐

  1. java&comma; poi&comma; excel

    工作需要用java操作Excel,现在网上搜索了一下,决定选取POI包来操作.pom内容如下: <dependency> <groupId>org.apache.poi< ...

  2. 深入剖析PHP输入流 php&colon;&sol;&sol;input&lpar;与POST&sol;GET的区别&rpar;

    PHP输入流php://input 转:http://www.nowamagic.net/academy/detail/12220520 在使用xml-rpc的时候,server端获取client数据 ...

  3. &lbrack;Elasticsearch&rsqb; 多字段搜索 &lpar;三&rpar; - multi&lowbar;match查询和多数字段 &lt&semi;译&gt&semi;

    multi_match查询 multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询. NOTE 存在几种类型的multi_match查询,其中的3种正好和在“了解你的数据”一节中提 ...

  4. truncate table 和delete

    delete table 和 truncate table 使用delete语句删除数据的一般语法格式: delete [from] {table_name.view_name} [where< ...

  5. Notice &colon; Soft open files now is 1024&comma; We recommend greater than 10000

    在研究 workerman 时, 报了这个错误, 感觉只是个notice级别的, 就一直给忽略掉了, 今天有时间, 就查了一下. 其实本质就是 ulimit 这个命令 打开一个命令行, 输入 ulim ...

  6. c语言宏定义详解

    1,防止一个头文件被重复包含 #ifndef COMDEF_H #define COMDEF_H //头文件内容 #endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数 ...

  7. Hive(五)数据类型与库表操作以及中文乱码

    一.数据类型 1.基本数据类型 Hive 支持关系型数据中大多数基本数据类型 类型 描述 示例 boolean true/false TRUE tinyint 1字节的有符号整数 -128~127 1 ...

  8. datagrid在MVC中的运用10-勾选

    本文体验与勾选有关的特性. 需要加载的books.json 展开{ "total": 4, "rows": [ { "productid": ...

  9. 【BZOJ1692】&lbrack;Usaco2007 Dec&rsqb;队列变换 后缀数组&plus;贪心

    [BZOJ1692][Usaco2007 Dec]队列变换 Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛”.在这场比 ...

  10. ElementUI使用问题记录:设置路由&plus;iconfont图标&plus;自定义表单验证

    一.关于导航怎么设置路由 1.在el-menu这个标签的属性中添加 router ,官方文档的解释是:启用vue-router 这种模式 2.在el-menu-item标签中的index属性直接书写路 ...