CodeForces 114E Double Happiness (省空间的素数筛法)
来源:互联网 发布:骂人语音软件 编辑:程序博客网 时间:2024/05/22 15:11
之前学习过一个省空间的素数筛法,见:http://blog.csdn.net/whyorwhnt/article/details/9397289
这回学到一个更省空间的……利用STL标准库中的bitset
以下转自:http://www.cnblogs.com/boloyonghao/archive/2012/07/12/2588599.html
#include<bister>
using std::bitset;
一句话定义:可自定义位数,用作记录二进制的数据类型.
一,定义和初始化
bitset<n> b; //b有n位,每位都为0;
bitset<n> b(u); //b是unsigned long型u的副本
bitset<n> b(s); //b是string对象s中含有n位字符串的副本
bitset<n> b(s, pos, n); //b是s中从pos位置开始的n个位置的副本
bitset<n> b(s,pos); //b从s的pos位置开始取值到s末尾(注取的值从b的右端开始)
注:①n定义的位数在初始化时按初始值填充,赋值超出的范围舍去,空余的以零填充.
②bitset从string对象读入位集时按从右到左的顺序.
二,操作
b.any(); //查找b是否存在1?
b.none(); //b中不存在1吗?
b.count(); //b中1的个数
b.size(); //b的位数
b[pos]; //访问b中pos处的数值
b.test(pos); //检测b中pos处是否为1
b.set(); //把b中所有位 置为1
b.set(pos); //把b中pos位置为1
b.reset(); //把b中所有位置为0
b.reset(pos); //把b中pos位置为0
b.flip(); //b中所有二进制位取反
b.flip(pos); //b中在pos处的二进制位取反
b.to_ulong; //返回一个同值得unsigned long值
os << b; //把b中位集输出
关于本题:
bool型占一个字节,bitset专门针对位,以位为单位可以将开销降到最小
参考了:http://blog.csdn.net/acdreamers/article/details/12753601
题意:由费马平方和定理我们知道,一个奇素数能表为平方和,那么它一定形如4k+1型的,现在给一个区间[l,r],其中
,求在此区间有多少个4k+1型的素数。
#include <iostream>#include <cstdio>#include <cstring>#include <bitset>using namespace std;const int N = 300000005;bitset<N> prime;int main (){int left,right,i;scanf("%d%d",&left,&right);prime.set(); //所有位置置1for (i=3;i*i<=right;i+=2) if (prime[i])for (int j=i*i;j<=right;j+=2*i)prime[j]=false;int cnt=(left<=2 && 2<=right);for (i=5;i<=right;i+=4)if (i>=left && prime[i])cnt++;printf("%d\n",cnt);return 0;}
- CodeForces 114E Double Happiness (省空间的素数筛法)
- Codeforces Beta Round #86 (Div. 2 Only) E Double Happiness 素数筛法,费马平方和定理
- 筛选素数空间压缩(数论)&& Double Happiness
- Double Happiness 113C 4n+1的素数必能表示成两个平方数的和
- codeforces 113C C. Double Happiness(数论+暴力)
- 【随便做做】Codeforces#86 Problem C Double Happiness
- CodeForces 27E 素数筛,暴力
- Codeforces 101484 E Double Fence
- CODEFORCES, 450E Jzzhu and Apples <筛素数>
- Codeforces 155E E. Double Profiles【思维+hash】
- codeforces 225E 梅森素数
- codeforces 225E E. Unsolvable(梅森素数+数学)
- 节约空间的筛素数方法
- JAVA的double值去掉"E"
- Happiness
- Happiness
- Happiness
- Happiness
- Thumbnail 类简介
- 小度wifi还原为无线网卡
- linux+环境变量
- 初学者——J2SE的基础语法总结
- 高德笔试题2012
- CodeForces 114E Double Happiness (省空间的素数筛法)
- 第一次使用 CSDN Code
- ubuntu与centos防火墙的开关
- c#编写时统软件
- 开源软件
- 几种最短路径算法的比较
- CoAP协议及开源实现
- 技能提高:编程语言练习提纲
- Just the Facts