线性筛法求素数

求素数是比较基本的内容,有时候我们会需要打一个素数表。一般如果n比较小我们会使用(%2~sqrtn)这种算法,简单但是时间耗费很多,复杂度是O(n^2)。这里介绍一种筛选求素数法,基本要点是,如果找到一个素数如3,那么就往后筛出所有3的倍数。

一般筛选求素数:

void init()
{memset(prim, true, sizeof(prim));for (int i = 2; i*i <= maxn; i++){if (prim[i])		//如果是素数就把其倍数全删掉for (int j = i; i*j <= maxn; j++)//j从i开始可以避免一部分重复prim[i*j] = false;}
}
这个方法比一般的打表法快,但运算中间有大量重复,如:i=2时,筛除30=2*15,但i=5时,筛除30=5*6,重复的标示了。
void init()
{for (int i = 2; i < maxn; i++){if (!map[i]){for (int j = i; j < maxn; j+=i)map[j] = map[j / i] + 1; //这样还可以统计i由几个素因子构成}}
}

线性筛选求素数:

void init()
{memset(notprim, false, sizeof(notprim));int cnt = 0;for (int i = 2; i <= maxn; i++){if (!notprim[i]) prim[cnt++] = i;		//如果是素数直接赋值for (int j = 0; j < cnt&&i*prim[j] <= maxn; j++)//如果是合数,将前面所有的素数乘当前i筛去{notprim[i*prim[j]] = true;if (i%prim[j] == 0)	//关键处:如果当前合数中出现前面已经出现的素数就跳出break;}}
}
首先要明确,所有合数都可以由素数相乘得到。
所以如果 i 是合数,此时 i 可以表示成递增素数相乘 i=p1*p2*...*pn, pi都是素数(2<=i<=n), pi<=pj ( i<=j ),p1是最小的系数。
根据“关键处”的定义,当p1==prim[j] 的时候,筛除就终止了,也就是说,只能筛出不大于p1的质数*i
我们可以直观地举个例子。i=2*3*5,此时能筛除 2*i ,不能筛除 3*i,如果能筛除3*i 的话,当 i' 等于 i'=3*3*5 时,筛除2*i' 就和前面重复了。

例子:POJ2909
题目要求输入一个数,输出有几种方案,使这个数能等于两个素数相加
15362476Seasonal2909Accepted212K0MSC++646B2016-04-07 08:09:05
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxn 2<<14
bool notprim[maxn];
int prim[maxn];void init()
{memset(notprim, false, sizeof(notprim));int cnt = 0;for (int i = 2; i <= maxn; i++){if (!notprim[i]) prim[cnt++] = i;		//如果是素数直接赋值for (int j = 0; j < cnt&&i*prim[j] <= maxn; j++)//如果是合数,将前面所有的素数乘当前i筛去{notprim[i*prim[j]] = true;if (i%prim[j] == 0)	//关键处:如果当前合数中出现前面已经出现的素数就跳出break;}}
}int main()
{int n;init();while (scanf("%d", &n), n){int num = 0;for (int i = 2; i * 2 <= n; i++)if (!notprim[i] && !notprim[n - i])num++;printf("%d\n", num);}return 0;
}




转载于:https://www.cnblogs.com/seasonal/p/10343791.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

硬件nat关闭还是开启_超能课堂(173):AfterBurner不止超频,还是绝佳的游戏伴侣...

微星AfterBurner软件可以说是一个相当好用的显卡工具&#xff0c;它好用的超频功能估计都不用我多说了吧&#xff1f;微星并没有把这款软件限制在自己品牌的显卡能用&#xff0c;各个品牌的显卡都能用&#xff0c;无论A卡还是N卡都可以用AfterBurner来超频&#xff0c;软件在超…

java dataset redis,利用Spring-Data-Redis和Jedis操作Redis缓存

概述 Jedis是redis官方推荐的用于访问Java客户端&#xff0c;在https://github.com/xetorthio/jedis下载最新的jedis。 访问redis 1、访问简单的key——value&#xff0c; pu只需简单几步&#xff0c;就可以利用Spring-Data-Redis和Jedis操作Redis缓存。步骤如下&…

javascript Array学习与使用

一&#xff0e;Javascript数组是无类型的&#xff1b;数组元素可以任意类型&#xff0c;并且同一个数组中的不同元素也可能有不同的类型&#xff0c;javascript数组是动态的&#xff0c;会根据需要增长或者缩减&#xff0c;每一个数组都有一个length属性。它不是只读的&#xf…

mx350显卡天梯图_CPU天梯图与显卡天梯图2020年最新版

最新CPU天梯图较之以往没有太大的变化&#xff0c;前十位置还是那几款。但是继阿里之后&#xff0c;腾讯也开始准备自己制作芯片了&#xff0c;毕竟自研AI芯片的诱惑还是很大的&#xff0c;2020年有不少的厂商都推出了新鲜美味的显卡&#xff0c;有些是老卡翻新做性价比。有的则…

matlab写字,Matlab实现鼠标写字代码

类型&#xff1a;编程工具大小&#xff1a;1.5M语言&#xff1a;中文 评分&#xff1a;1.2标签&#xff1a;立即下载最早的程序&#xff0c;实在忘了从哪里下载的了。能够实现鼠标的手写输入&#xff0c;但是一些不连续的点。tmouse.mfunction tmouse(action)% TMOUSE 本例展示…

[Linux]变量加减赋值以及将String转int

teddytoshiba~$ a"76"teddytoshiba~$ echo $((a3))79teddytoshiba~$ echo $((a-12))64teddytoshiba~$取文件名以及文件路径的脚本&#xff1a;#!/bin/shtmp$1filenameecho $1 | awk -F/ {print $(NF)}echo "filename":$filenamefilenamelengthecho | awk …

matlab在绘图时分数,第三章_Matlab图形绘制试卷.ppt

2、griddata函数&#xff0c;用来产生经插值后均匀间隔数据作图。常用的调用方法是&#xff1a;[XI,YI,ZI] griddata(x,y,z,XI,YI,’method’)&#xff0c;其中x,y,z来自关系式zf(x,y)&#xff0c;也可以是离散的数据点&#xff0c;ZI是有XI和YI插值后得到的对应点。其中metho…

from rfc 2068 hypertext怎么解决_你好,打工人!用英语怎么表达“打工人”?可别直接说 worker...

打工人&#xff0c;打工魂&#xff0c;打工人是人上人&#xff01;最近&#xff0c;「打工人」这个词火了&#xff01;几乎一夜之间&#xff0c;很多人在和朋友打招呼时&#xff0c;都自称“打工人”。那“打工人”是什么意思&#xff1f;这里的“打工人”&#xff0c;其实是对…

fbset

fbset用于读取和设置framebuffer的参数。# fbset mode "800x480-112"# D: 64.998 MHz, H: 58.034 kHz, V: 112.035 Hzgeometry 800 480 800 480 16timings 15385 220 40 21 7 60 10accel falsergba 5/11,6/5,5/0,0/0 endmode

mysql中更新的命令是,mysql命令总结(陆续更新中)

批量mysql 数据导入 load data local infile xx into table xx;连接数据库&#xff1a;mysql -h hostname -P port -u username -p -D databasename查看提供什么存储引擎&#xff1a;show engines;查看当前引擎&#xff1a;show variables like %storage_engine%;查看表使用了…

STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)

前言大概半个月之前捣鼓了下利用STM32实现实时曲线显示&#xff0c;中间又做了一点小改进和扩充&#xff0c;在这里更新一下&#xff1a;利用DMA进行缓冲区到LCD GRAM的像素数据搬运效果更好的曲线绘制策略代码可以在这里找到&#xff1a;<写得比较乱&#xff0c;望谅解( &a…

Vmware虚拟机三种网络模式详解

原文来自http://note.youdao.com/share/web/file.html?id236896997b6ffbaa8e0d92eacd13abbf&typenote 我怕链接会失效&#xff0c;故转载此篇文章。通过这篇文章&#xff0c;我对之前疑惑的地方有了直观的理解&#xff0c;很多地方并没有自己动手实践&#xff0c;所以这篇…

ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...

模块对应cabin_controllers/serial_to_mcu。模块实现的功能为监听网络中PWM矩阵信息&#xff0c;将其转换成十六进制数据通过串口下发至MCU&#xff0c;实现对推进器电机的控制。模块数据的串口通信借助了ros的serial工具包&#xff08;sudo apt-get install ros-melodic-seria…

2018php项目实战视频教程,2018PHP实战技术VIP在线学习视频课程

课程目录&#xff1a;1-1 疯狂讲义之web简介2-1 从搭建PHP开发环境开始2-2 第一个PHP程序2-3 PHP变量相关知识2-4 PHP数据类型2-5 PHP数据类型之进制转换2-6 PHP数据类型之浮点型2-7 PHP数据类型系统函数简介3-1 PHP数据类型字符串的声明与定义3-2 数据类型之数组、资源、null类…

Struts1.x在MyEclipse中的环境搭建和配置

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09; 先解压Struts-1.3.10-all.zip的文件夹Struts-1.3.10-all备用 -> 打开MyEclipse -> 新建一个 web project -> 在工程名上按右键鼠标选 Properties -> 弹出 Properties 面板 …

iphone固件降级_iPhone无法开机怎么办?三种快速维修方法

苹果手机的流畅让许多用户为之买单&#xff0c;但毕竟是电子产品&#xff0c;难免会有一些故障&#xff0c;其中无法开机就是一个很头疼的问题&#xff0c;一方面担心手机报废&#xff0c;一方面担心修理费过高&#xff0c;而造成 iPhone 无法开机的原因有很多&#xff0c;这里…

strspn函数php,php strspn函数怎么用?

strspn()函数是PHP中的一个内置函数&#xff0c;语法为strspn(string,charlist,start,length)&#xff0c;用于返回在字符串中包含 charlist 参数中指定字符的数目。php strspn()函数怎么用&#xff1f;strspn() 函数返回在字符串中包含 charlist 参数中指定的字符数目。语法&a…

【转载】架构师需要了解的Paxos原理、历程及实战

原文链接&#xff0c;请参见&#xff1a;http://weibo.com/ttarticle/p/show?id2309403952892003376258 数据库高可用性难题 数据库的数据一致和持续可用对电子商务和互联网金融的意义不言而喻&#xff0c;而这些业务在使用数据库时&#xff0c;无论 MySQL 还是 Oracle&#x…

酷冷至尊官方psu计算工具_酷冷至尊为Raspberry Pi推出Pi Case 40机壳,提供被动散热、卖27美元起...

Raspberry Pi(树莓派)是众所周知的廉价Single Board Computer&#xff0c;虽然名字里面有个“电脑”&#xff0c;但与我们一般广泛认知的台式机不同&#xff0c;它基本都是裸着一块主机板来使用&#xff0c;显得很极客、创客&#xff0c;当然也还是有一些玩家自制或者小作坊给R…

dede plus ad js.php,织梦程序中plus文件作用介绍及安全设置

官方网站下载了Dedecms安装包以后&#xff0c;解压出来&#xff0c;有一个uploads文件&#xff0c;这里面的文件夹才是网站的安装文件&#xff0c;里面文件很多&#xff0c;今天织梦58就主要介绍下plus文件夹里面的各个功能模块&#xff0c;如果你只是做一个宣传网站的话&#…