素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )
求素数
题目描述
求小于n的所有素数的数量。
输入
多组输入,输入整数n(n<1000000),以0结束。
输出
输出n以内所有素数的个数。
示例输入
10
0
示例输出
4
提示
以这道题目为例,要找出n以内的素数, n<=1000000.
为了节省时间,用素数筛 先把1000000以内的素数全部标记出来!
埃拉托斯特尼筛法,此素数筛核心算法代码:
这样跑完这个代码,是素数的会标记为0, 不是素数的标记为1。 数据处理完毕!
int f[1000004];
int i, j;
memset(f, 0, sizeof(f)); f[1]=1 ; //标记1的不是素数 标记0的是素数
i=2;
while(i<=500000) //这个地方需要优化
{
for(j=i*2; j<=1000000; j+=i )
{
f[j]=1;
}
i++;
while(f[i]==1)
{
i++;
}
}
优化后素数筛模板:10^8的数据,只需要0.34秒筛完
代码【模板使用】:
int f[100000000]; //优化素数筛 筛1百万以内的素数
int main()
{
int i, j;
f[1]=1;
memset(f, 0, sizeof(f));
int dd=sqrt(1e8+0.5);
i=2;
while(i<=dd)
{
for(j=i*2; j<=1000000; j+=i)
f[j]=1; //标记不是素数
i++;
while(f[i]==1)
i++; //移动到下一个是素数的地方
}
//下标从2开始,f[i]=1表示不是素数,f[i]=0是素数
题目代码:
#include <stdio.h>
#include <string.h> int f[1000004]; int main()
{
int n;
int i, j;
memset(f, 0, sizeof(f)); f[1]=1 ; //标记不是
i=2;
while(i<=500000)
{
for(j=i*2; j<=1000000; j+=i )
{
f[j]=1;
}
i++;
while(f[i]==1)
{
i++;
}
} int k, cnt;
while(scanf("%d", &n) && n!=0 )
{
cnt=0;
for(k=1; k<n; k++)
{
if(f[k]==0)
cnt++;
}
printf("%d\n", cnt );
}
return 0;
}
欧拉筛法,程序核心代码:
bool f[N+1]; //标记数组
int num=1; //控制素数表下表
int su[100000]; //素数标
void Oula_shai() //欧拉素数筛法
{
int i, j;
memset(f, true, sizeof(f)); //初始化假设每个数都是素数
for(i=2; i<=N; i++) //从2开始测试
{
if(f[i]==true)
su[num++]=i; //将该数存入素数表
for(j=1; j<num; j++) //遍历整个素数表
{
if(i*su[j]>N) //如果超出了最大上界 跳出
break;
f[i*su[j]]=false; //将倍数从素数筛里筛除
if(i%su[j]==0) //若当前素数是i的最小素因子,则分析下一个整数
break;
}
}
} //注意由于初始化,f[0]和f[1]都是true, 但0和1既不是素数也不是合数
这道题的对应代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#define N 1000000
bool f[N+1];
int num=1;
int su[100000];
void Oula_shai()
{
int i, j;
memset(f, true, sizeof(f));
for(i=2; i<=N; i++)
{
if(f[i]==true)
su[num++]=i;
for(j=1; j<num; j++)
{
if(i*su[j]>N)
break;
f[i*su[j]]=false;
if(i%su[j]==0)
break;
}
}
} int main()
{
int n;
Oula_shai();
while(scanf("%d", &n)&&n)
{
int ans=0; for(int i=1; i<num; i++)
{
if(su[i]<=n)
ans++;
else
break;
}
printf("%d\n", ans );
}
return 0;
}
素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )的更多相关文章
- [洛谷P3383][模板]线性筛素数-欧拉筛法
Description 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) Input&Output Input 第一行包含两个正整数N.M,分别表示查询的 ...
- 欧拉筛法模板&&P3383 【模板】线性筛素数
我们先来看欧拉筛法 •为什么叫欧拉筛呢?这可能是跟欧拉有关 •但是为什么叫线性筛呢?因为它的复杂度是线性的,也就是O(n),我们直接来看代码 #include<cstdio> #inc ...
- 『素数 Prime判定和线性欧拉筛法 The sieve of Euler』
素数(Prime)及判定 定义 素数又称质数,一个大于1的自然数,除了1和它自身外,不能整除其他自然数的数叫做质数,否则称为合数. 1既不是素数也不是合数. 判定 如何判定一个数是否是素数呢?显然,我 ...
- 2018牛客网暑期ACM多校训练营(第三场) H - Diff-prime Pairs - [欧拉筛法求素数]
题目链接:https://www.nowcoder.com/acm/contest/141/H 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K ...
- 素数判断-----埃氏筛法&欧拉筛法
埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...
- 【模板】埃拉托色尼筛法 && 欧拉筛法 && 积性函数
埃拉托色尼筛法 朴素算法 1 vis[1]=1; 2 for (int i=2;i<=n;i++) 3 if (!vis[i]) 4 { 5 pri[++tot]=i; 6 for (int j ...
- (数论 欧拉筛法)51NOD 1106 质数检测
给出N个正整数,检测每个数是否为质数.如果是,输出"Yes",否则输出"No". Input 第1行:一个数N,表示正整数的数量.(1 <= N &l ...
- (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)
题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- UVA 10820 欧拉函数模板题
这道题就是一道简单的欧拉函数模板题,需要注意的是,当(1,1)时只有一个,其他的都有一对.应该对欧拉函数做预处理,显然不会超时. #include<iostream> #include&l ...
随机推荐
- C#读取资源文件的两种方法及保存资源文件到本地
方法1 GetManifestResourceStream VB.NET中资源的名称为:项目默认命名空间.资源文件名 C#中则是:项目命名空间.资源文件所在文件夹名.资源文件名 例如:istr = ...
- CocoaAsyncSocket使用笔记
先去github的站点下载最新的包,然后先看看介绍. 写的比較具体了 https://github.com/robbiehanson/CocoaAsyncSocket/wiki/Intro_GCDAs ...
- 如何把VBS转换为EXE文件
如下所示,我想要做一个把360网速测试剥离开来的绿色版,有一个TestSpeed.bat命令,双击之后去执行了360AppLoader.exe,并且会调用netmon文件夹的NetSpeed.dll文 ...
- DFRobot万物互联大赛第一轮
前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. DF搞的这个比赛还挺有趣:micro:bit × OBLOQ DF创客社区玩转物联网挑战赛,一边在写文章一边在爱奇艺上看着印度电影 ...
- 全国天气预报数据API调用PHP示例
本代码示例是基于PHP的聚合数据全国天气预报API服务请求的代码样例,使用前你需要: ①:通过https://www.juhe.cn/docs/api/id/39 申请一个天气预报API的appkey ...
- React15.6.0实现Modal弹层组件
代码地址如下:http://www.demodashi.com/demo/12315.html 注:本文Demo环境使用的是我平时开发用的配置:这里是地址. 本文适合对象 了解React. 使用过we ...
- Linux视频培训教程
很详尽的Linux培训教程,既包含日常工作常常要用到的实践及技巧,又包含Linux认证及系统管理及架构,讲的很不错.最关键的.这么具体,完整的教程还是免费的.花了点时间拿它整理了下. 第一部分: Li ...
- swift菜鸟入门视频教程-05-控制流
本人自己录制的swift菜鸟入门.欢迎大家拍砖.有什么问题能够在这里留言. 主要内容: For 循环 While 循环 条件语句 控制转移语句(Control Transfer Statements) ...
- Effective Java - [3. 对象通用方法]
Item 10. 若覆盖equals方法,需要遵守规则
- zookeeper参数的详解
安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookee ...