C/C++筛选法算素数
什么是求素数
)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数
普通枚举法:
#include <iostream>
#include <string>
#include <cmath>
#include <cstring>
using namespace std;
bool isPlain(int x){
if(x<2) return false;
else{
for(int i=2;i<x;i++)
{
if(!(x%i))
return false;
}
}
return true;
}
int main()
{
int n;
cin>>n;
int cot=0;
for(int j=0;j<n;j++){
if(isPlain(j)){
cout<<j<<((++cot%7==0)?"\n":"\t");
}
}
}
筛选法:
- 原始版本:
#include <iostream>
#include <string>
#include <cmath>
#include <cstring>
using namespace std;
int main()
{
int n;
cin>>n;
bool* ans=new bool[n];
memset(ans,true,sizeof(bool)*n);//
ans[0]=false;
ans[1]=false;
for(int i=2;i<n;i++){
if(ans[i]){
for(int j=i*2;j<n;j+=i){//倍数取整
ans[j]=false;
}
}
}
int col = 0;
for(int i=0;i<n;i++){
if(ans[i]){
cout<<i<<" ";
}
}
return 0;
}
- 改进版本
#include <iostream>
#include <string>
#include <cmath>
#include <cstring>
#include <bitset>
using namespace std;
int main()
{
int n;
cin>>n;
bitset<100000> ans;
ans.set(0);
ans.set(1);
for(int j=2; j<=sqrt(n); j++)
{
for(int i=2*j; i < n; i+=j)
{
ans.set(i);
}
}
int cot=0;
for(int i=0; i<n; i++)
{
if(ans[i]!=1)
{
cout<<i<<((++cot%7==0)?"\n":"\t");
}
}
}
例题
question: 给定数字n,求出小于等于n的素数的个数,假设n<=1000000
- 埃式筛选法(
#include <bits/stdc++.h>
/**
@author:d g w
*/
using namespace std;
const int n=1000002;
bool isprime[1000002];
int num[1000002];
int main()
{
fill(isprime,isprime+n,1);
fill(num,num+n,0);
isprime[1]=0;
num[1]=0;
for(int i=2;i<n;i++){
if(isprime[i]){
num[i]=num[i-1]+1;
for(int j=2*i;j<n;j+=i){
isprime[j]=0;
}
}else{
num[i]=num[i-1];
}
}
int n;
while(~scanf("%d",&n)){
cout<<num[n];
}
return 0;
}
- 欧拉筛选
const int cont = 1000002;;
int Prime[cont];
bool vis[cont];
void prepare()
{
int num = 0;
memset(vis,true,sizeof(vis));
for(int i = 2; i <= cont; ++i)
{
if(vis[i])
Prime[++num] = i;
for(int j = 1; j <= num; ++j)
{
if (i * Prime[j] > cont)
break;
vis[i * Prime[j]] = false;
if (i % Prime[j] == 0) //表明这个数已经被筛过了
break;
}
}
}
C/C++筛选法算素数的更多相关文章
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...
- poj3006 筛选法求素数模板(数论)
POJ:3006 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. 筛选法求素数的大概思路是: 如果a这个数是一个质数,则n*a不是质数. 用一个数组实现就是 ...
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...
- java筛选法求素数
这本身没什么,代码一堆 发来纪念下而已 本来刚学习java,编写输出100以内的素数 对于我这个有代码运行性能洁癖的人(但是本身又不懂算法)来说,不能忍 于是看了些资料 参考: http://blog ...
- NYOJ--187--快速查找素数(筛选法,素数打表)
快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N ...
- ny24 素数距离的问题 筛选法求素数
素数距离问题时间限制:3000 ms | 内存限制:65535 KB难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素 ...
- ny520 最大素因子 筛选法求素数
最大素因子时间限制:1000 ms | 内存限制:65535 KB难度:2 描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序 ...
- HDU 2136 Largest prime factor(查找素数,筛选法)
题目梗概:求1000000以内任意数的最大质因数是第几个素数,其中 定义 1为第0个,2为第1个,以此类推. #include<string.h> #include<stdio.h& ...
- 筛选法求N以内的所有素数
素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 ]; int mai ...
随机推荐
- 本地存储之localStorage
localStorage 本地存储 .对象.存数据 .取数据 存储的数据量在20M左右 localStorage 是window下面的属性,用的时候可以省略window 数据只能存储字符串类型的 lo ...
- linux GCC 编译多个.c/.h文件
基本认识: #include <xxx>:首先去系统目录中找头文件,如果没有在到当前目录下找.像标准的头文件 stdio.h.stdlib.h等用这个方法. #include " ...
- Ubuntu下比较通用的makefile实例
本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html 笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应 ...
- setImmediate()
在循环事件任务完成后马上运行指定代码 以前使用 setTimeout(fn, 0); Since browsers clamp their timers to 4ms, it really d ...
- PHP实现前台页面与MySQL的数据绑定、同步更新
今天我来给大家介绍一个PHP-MySQL的小项目. 使用 PHP和前台Ajax 实现在前台对MySQL数据库中数据的增.删等操作语句功能. 如果有问题,欢迎拍砖~ 首先,我们先做好前台HTML.CSS ...
- 第一章 Linux系统介绍与环境搭建准备
1.操作系统: Operating System,简称OS,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心. 操作系统就是处于用户与计算机系统硬件之间用于传递信息的系统程序软件. ...
- Spring配置补充
# :Spring配置补充 ## 一:灵活配置DataSource (1) 使用属性文件配置数据源 (2) 使用JNDI数据源 (3) Spring中的Bean的作用域问题, Sin ...
- [转载] java的动态代理机制详解
转载自http://www.cnblogs.com/xiaoluo501395377/p/3383130.html 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代 ...
- python基础(二)-------数据类型
python开发基础篇(二)数据类型 python数据类型有: 1.数字 1.只能存放一个值 2.一经定义,不可更改 3.直接访问 主要的分类为:整型,长整型,(python2有长整型的概念Pytho ...
- Python的classmethod和staticmethod区别
静态方法(staticmethod) 类方法(classmethod) 静态方法和类方法都可以通过类名.方法名或者实例.方法访问. #-*- coding:utf8 -*- class A(objec ...