博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ 3292】 Semi-prime H-numbers
阅读量:6493 次
发布时间:2019-06-24

本文共 1032 字,大约阅读时间需要 3 分钟。

打个表

题意是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 
#include
#include
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;}

转载地址:http://xekyo.baihongyu.com/

你可能感兴趣的文章
bzoj1034
查看>>
百度地图 鼠标绘制,获取矩形,多边形的顶点经纬度
查看>>
回文树模板
查看>>
struts2之防止表单重复提交
查看>>
【转】Netty系列之Netty并发编程分析
查看>>
cf591d
查看>>
图片存储系统TFS
查看>>
MYSQL备份与恢复
查看>>
贪心/数学 Codeforces Round #212 (Div. 2) A. Two Semiknights Meet
查看>>
Python类__call__()方法
查看>>
「小程序JAVA实战」 小程序wxss样式文件的使用(七)
查看>>
容斥定理,皮克公式
查看>>
[LeetCode] Rotate List
查看>>
javascript Date format(js日期格式化)(转)
查看>>
git+idea
查看>>
集合异常测试
查看>>
cocos2d游戏开发,常用工具集合
查看>>
FatTree胖树拓扑结构
查看>>
Kafka深度解析
查看>>
unsigned 后面不跟类型的情况
查看>>