【POJ 3292】 Semi-prime H-numbers



打个表

题意是1 5 9 13...这样的4的n次方+1定义为H-numbers

H-numbers中仅仅由1*自己这一种方式组成 即没有其它因子的 叫做H-prime

两个H-prime的乘积叫做H-semi-prime 另一个要求是H-semi-prime仅仅能由两个H-prime组成 即4个H-number 不可由3个或几个H-number构成

筛出来个满足题意的表 把每一个数内满足的个数存起来O(1)输出就可以

代码例如以下:

#include <iostream>
#include <cstdio>
#include <cstring> using namespace std;
const int sz = 1000001; int IsPrim[sz+1];
int p[sz];
int tp; void Init()
{
memset(IsPrim,0,sizeof(IsPrim));//H-numbers都初始化0 即默认都为H-prime
int i,j,cnt;
tp = 1;
for(i = 5; i <= sz; i += 4)
{
for(j = 5; j*i <= sz; j += 4)
{
if(IsPrim[i] || IsPrim[j])//两个数有一个不是H-prime 组合就不为H-semi-prime
IsPrim[i*j] = -1;
else IsPrim[i*j] = 1;//否则组合为H-semi-prime 注意 H-semi-prime就不为H-prime了 因为顺序枚举 后面遍历到的之前肯定会推断一下 故不会漏判
}
}
cnt = 0;
for(i = 1; i <= 1000001; ++i)
{
if(IsPrim[i] == 1) cnt++; p[tp++] = cnt;
}
} int main()
{
Init();
int h;
while(~scanf("%d",&h) && h)
{
h = (h-1)/4*4+1;
printf("%d %d\n",h,p[h]);
}
return 0;
}

最新文章

  1. 常用的SQL语句
  2. Django ORM、一对一、一对多、多对多、详解
  3. LeetCode&mdash;&mdash;Copy List with Random Pointer(带random引用的单链表深拷贝)
  4. A. Difference Row
  5. provider: Named Pipes Provider, error: 40 - 无法打开到 SQL Server 的连接
  6. 在Java中怎样逐行地写文件?
  7. 使用Docker运行Microsoft SQL Server 2017
  8. 浏览器兼容html头部&lt;meta&gt;标签主要内容详情
  9. bfs记录路径,蓝桥杯真题
  10. python网络爬虫笔记(四)
  11. [20171106]修改show spparameter的显示宽度.txt
  12. SSL证书读取
  13. 16 python xml模块
  14. 【python】python安装lxml报错【2】
  15. APPLICATION FAILED TO START
  16. LWIP2.0.2 &amp; FreeRTOS &amp; MQTT 客户端的 使用
  17. php获取excel文件数据
  18. 使用C#连接 MyCat 链接串
  19. [转]Visual F# Samples and Walkthroughs
  20. 第6章1节《MonkeyRunner源代码剖析》Monkey原理分析-事件源-事件源概览

热门文章

  1. (转)iOS 常用宏定义
  2. html,css样式错误总结
  3. 解决img标签上下出现间隙的方法
  4. Java-转换原始类型为一个字符串
  5. BZOJ1926 [Sdoi2010]粟粟的书架 【主席树 + 二分 + 前缀和】
  6. Classloader中loadClass()方法和Class.forName()区别
  7. 浅谈Oracle数据库分区表
  8. 解决mybatis xml文件代码提示
  9. Spoj-ANTP Mr. Ant &amp; His Problem
  10. 品酒大会 BZOJ 4199