什么是求素数

)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++筛选法算素数的更多相关文章

  1. Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)

    题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...

  2. poj3006 筛选法求素数模板(数论)

    POJ:3006 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. 筛选法求素数的大概思路是: 如果a这个数是一个质数,则n*a不是质数. 用一个数组实现就是 ...

  3. PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数

    PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...

  4. java筛选法求素数

    这本身没什么,代码一堆 发来纪念下而已 本来刚学习java,编写输出100以内的素数 对于我这个有代码运行性能洁癖的人(但是本身又不懂算法)来说,不能忍 于是看了些资料 参考: http://blog ...

  5. NYOJ--187--快速查找素数(筛选法,素数打表)

    快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数.   输入 给出一个正整数数N ...

  6. ny24 素数距离的问题 筛选法求素数

    素数距离问题时间限制:3000 ms  |  内存限制:65535 KB难度:2 描述    现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素 ...

  7. ny520 最大素因子 筛选法求素数

    最大素因子时间限制:1000 ms  |  内存限制:65535 KB难度:2 描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序 ...

  8. HDU 2136 Largest prime factor(查找素数,筛选法)

    题目梗概:求1000000以内任意数的最大质因数是第几个素数,其中 定义 1为第0个,2为第1个,以此类推. #include<string.h> #include<stdio.h& ...

  9. 筛选法求N以内的所有素数

    素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 ]; int mai ...

随机推荐

  1. ES6新特性之解构使用细节

    ES6的解构说白了就是能够让我们一次性取到多个值,大致可分为一下几个方面 1.数组解构 普通的一维数组解构,如下one = array[0],two=array[1],three=array[2] v ...

  2. Java--谈一谈代理

    一.代理概念    代理在我们日常生活经常听到这个名词,比如我们想看下google我们需要找个代理服务器来帮我们一下,比如我们想买一个外国的什么东西需要在代购网站或者找朋友帮忙在外国买一下,用概念一点 ...

  3. spring mvc常用注解的说明

    最近一段时间学习了springboot,所以熟悉一下mvc中常用的注解,这样可以方便开发 简介: @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类 ...

  4. 2017 ICPC 广西邀请赛1004 Covering

    Covering Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. 2016 ICPC总结

    2016 ICPC总结 九月份开学,开始知识点的补充,刚开始的几周都在刷acmsteps,十月开始进行专题性的学习,首先进行的数据结构,给自己定的计划,十一月前看完数据结构,刚开始的时候看的都是以前的 ...

  6. 五种js判断是否为整数(转)

    五种js判断是否为整数类型方式 作者:snandy 这篇文章主要介绍了五种JavaScript判断是否为整数类型方式,需要的朋友可以参考下   这篇看看如何判断为整数类型(Integer),JavaS ...

  7. javascript中new操作符

    当代码var p= new Person("tom")执行时,其实内部做了如下几件事情: 1.创建一个空白对象(new Object()). 2.拷贝Person.prototyp ...

  8. setInterval计时器延时问题

    计时器延时问题 js计时器 使用setTimeout.setInterval函数时,第二个参数的设置的时间间隔t是自该函数(setTimeout(f1,t).setInterval(f1,t))被调用 ...

  9. filereader api 类型

    filereader类似XMLHttpRequest,只是它用来从文件系统读取文件,提供了不同的方法去读取文件数据:1.readAsText2.readAsDataURL3.readAsBinaryS ...

  10. Ajax 跨域 异步 CORS

    HTTP access control (CORS) 核心在于使用定制(添加新的header)HTTP header让浏览器和服务器有更多的相互了解,从而决定一个请求或者响应成功还是失败   对于一个 ...