素数问题三步曲_HDOJ2098
偶然间OJ上敲到一题素数问题便查询了相关算法。对于该类问题我个人学习分为三步曲:最笨的方法(TLE毫无疑问)->Eratosthrnes筛选法->欧拉线性筛选法
针对HDOJ2098这道题进行代码分析,发散性可以解决其他问题。

笨笨的方法(TLE)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int a,b,n;
while(1)
{
scanf("%d",&n);
// printf("这是输入的数:%d\n",n);
if(n==0) break;
int i=1,sum=0;
for(i=2;i<n/2;i++)
{
//判断i,n-i两者是否都是素数
int j=2,flag=0;
for(j=2;j<=i/2;j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
// printf("第一次判断i是否为素数结束\n");
for(j=2;j<=(n-i)/2;j++)
{
if((n-i)%j==0||(n-i)==1)
{
flag=1;
break;
}
}
// printf("第二次判断n-i是否为素数结束\n");
if(flag==0)
{
// printf("此时i和n-i都是素数:%d %d\n",i,n-i);
sum++;
}
}
printf("%d\n",sum);
}
return 0;
}
Eratorsthenes筛选法(AC)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define MAX 100000
bool num[10000]={false,false,true};
int main()
{
int n;
int i=0,j=0;
for(i=3;i<10000;i++)
{
//初始化所有的数都为素数
num[i]=true;
}
//从2开始对所有素数的倍数置为false
for(i=2;i*i<10000;i++)
{
if(num[i]==true)
{
for(j=i*i;j<10000;j+=i)
{
num[j]=false;
}
}
}
//检测输出所有比10000小的素数序列
// for(i=1;i<10000;i++)
// {
// if(num[i]==true)
// printf("%d ",i);
// }
while(1)
{
int cnt=0;
scanf("%d",&n);
if(n==0) break;
for(i=2;i<n/2;i++)
{
if(num[i]==true&&num[n-i]==true)
{
cnt++;
}
}
printf("%d\n",cnt);
}
return 0;
}
Eratorsthenes筛选法(复杂度nlogn)是素数问题中十分有名的解法:即要求N以下的所有为素数的数有多少个?我们需要检查到sqrt(n)是否存在素数即可。
- 假设有一个筛子存放1~N的数。2 3 4 5 6 7 8 9 10 11 12 ...N
- 先将2的倍数筛选出去(一定不为素数)2 3 5 7 9 11 13 17 19...N
- 将3的倍数筛选出去(一定不为素数)2 3 5 7 11 13 17 19...N
- 即不断对当前剩下的数列中最前面的数的倍数从数列中筛选出去,最后剩下的数列即为所有比N小的素数序列。
欧拉线性筛选法
我们可以发现在Eratorthenes筛选法中,30,这个数,在215中被筛了一次,在56中又被重复筛了,所以对于此处可以进行优化修改。但是我对于其中算法关键看了一会不是很懂,目前就暂时不写吧。
素数问题三步曲_HDOJ2098的更多相关文章
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- [转]Membership三步曲之入门篇 - Membership基础示例
本文转自:http://www.cnblogs.com/jesse2013/p/membership.html Membership三步曲之入门篇 - Membership基础示例 Members ...
- 第七章 new的三步曲
这章是本系列文章的重点,这章揭示了js对象的真正本质 看下面的事例 var a = new b(); 等价于 ①var a={}; ②a.__proto__=b.prototype; ③b.call( ...
- SQL Server2005 表分区三步曲(zz)
前言 SQL Server 2005开始支持表分区,这种技术允许所有的表分区都保存在同一台服务器上.每一个表分区都和在某个文件 组(filegroup)中的单个文件关联.同样的一个文件/文件组可以容纳 ...
- ASP.NET 安全系列 Membership三步曲之入门篇 - Jesse Liu
Membership 三步曲 ASP.NET 安全系列 Membership三步曲之入门篇 ASP.NET 安全系列 Membership三步曲之进阶篇 ASP.NET 安全系列 Membership ...
- OpenGL ES2.0编程三步曲 -转
原地址:http://blog.csdn.net/myarrow/article/details/7707943 1. 保存全局变量的数据结构 以下例子程序均基于Linux平台. typedef st ...
- VC控件自绘制三步曲
http://blog.csdn.net/lijie45655/article/details/6362441 实现自定义绘制的三步曲 既然您已经了解了绘制控件可用的各种选项(包括使用自定义绘制的好处 ...
- STM32中断编程三步曲教你弄会中断设置以及中断优先级设置
中断作为stm32中必不可少的一个功能,其重要性是不言而喻的因此把中断学习好是根本. 所以今天就来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工.问题是什么呢?项目中我用到了一个触摸键盘TTP229 ...
随机推荐
- Python3编写网络爬虫08-数据存储方式一-文件存储
数据存储 用解析器解析出数据之后,就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如TXT JSON CSV等.另外还可以保存到数据库中,如关系型数据库MySQL 非关系型数 ...
- Html body的滚动条禁止与启用
在写一个在页面中,经验证用户没有登录或session失效时候弹出登录框禁止页面滚动用到今天搞了一个功能,上下左右居中,模仿QQ空间里的样式,把横向和纵向滚动条禁止掉代码如下:<script ty ...
- WPFのBorder的用法
border介绍: 下面是StackPanel中,一个简单的,具有轻微圆角的边框,围绕在一组按钮外面: <Border Margin="5" Padding="5& ...
- python五十九课——正则表达式的拓展内容
演示正则表达式的拓展内容:函数:finditer(regex,string,[flags=0]):参数:和match.search.findall一样理解功能:将所有匹配的数据封装为一个一个的matc ...
- linux系统自签发免费ssl证书,为nginx生成自签名ssl证书
首先执行如下命令生成一个key openssl genrsa -des3 -out ssl.key 1024 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次rel ...
- 最好的8个 Java RESTful 框架
原文出处: colobu 过去的每一年,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可 ...
- 解决eclipse中Tomcat服务器的server location选项不能修改的问题
在Eclipse菜单栏中选择window — show view — server 可以看到服务的面板,服务面板中可看到已配置的Tomcat以及Tomcat下的项目 双击tomca进入设置界面,如果看 ...
- yii2查询汇总
页面输出list信息 return $this->render('index', [ 'model' => $model, 'cats' => $cats, 'findlist' = ...
- redsi一主两从三哨兵
1.前提准备 防火墙,selinux,主机名解析,所有主机安装gcc [root@localhost ~]# vim /etc/hosts 192.168.122.135 redis_master ...
- PAT A1111 Online Map (30 分)——最短路径,dijkstra
Input our current position and a destination, an online map can recommend several paths. Now your jo ...