偶然间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. 假设有一个筛子存放1~N的数。2 3 4 5 6 7 8 9 10 11 12 ...N
  2. 先将2的倍数筛选出去(一定不为素数)2 3 5 7 9 11 13 17 19...N
  3. 将3的倍数筛选出去(一定不为素数)2 3 5 7 11 13 17 19...N
  4. 即不断对当前剩下的数列中最前面的数的倍数从数列中筛选出去,最后剩下的数列即为所有比N小的素数序列。

欧拉线性筛选法

我们可以发现在Eratorthenes筛选法中,30,这个数,在215中被筛了一次,在56中又被重复筛了,所以对于此处可以进行优化修改。但是我对于其中算法关键看了一会不是很懂,目前就暂时不写吧。

素数问题三步曲_HDOJ2098的更多相关文章

  1. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  2. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  3. [转]Membership三步曲之入门篇 - Membership基础示例

    本文转自:http://www.cnblogs.com/jesse2013/p/membership.html Membership三步曲之入门篇 - Membership基础示例   Members ...

  4. 第七章 new的三步曲

    这章是本系列文章的重点,这章揭示了js对象的真正本质 看下面的事例 var a = new b(); 等价于 ①var a={}; ②a.__proto__=b.prototype; ③b.call( ...

  5. SQL Server2005 表分区三步曲(zz)

    前言 SQL Server 2005开始支持表分区,这种技术允许所有的表分区都保存在同一台服务器上.每一个表分区都和在某个文件 组(filegroup)中的单个文件关联.同样的一个文件/文件组可以容纳 ...

  6. ASP.NET 安全系列 Membership三步曲之入门篇 - Jesse Liu

    Membership 三步曲 ASP.NET 安全系列 Membership三步曲之入门篇 ASP.NET 安全系列 Membership三步曲之进阶篇 ASP.NET 安全系列 Membership ...

  7. OpenGL ES2.0编程三步曲 -转

    原地址:http://blog.csdn.net/myarrow/article/details/7707943 1. 保存全局变量的数据结构 以下例子程序均基于Linux平台. typedef st ...

  8. VC控件自绘制三步曲

    http://blog.csdn.net/lijie45655/article/details/6362441 实现自定义绘制的三步曲 既然您已经了解了绘制控件可用的各种选项(包括使用自定义绘制的好处 ...

  9. STM32中断编程三步曲教你弄会中断设置以及中断优先级设置

    中断作为stm32中必不可少的一个功能,其重要性是不言而喻的因此把中断学习好是根本. 所以今天就来好好啃一下中断配置的知识,俗话说:磨刀不误砍柴工.问题是什么呢?项目中我用到了一个触摸键盘TTP229 ...

随机推荐

  1. Python3编写网络爬虫08-数据存储方式一-文件存储

    数据存储 用解析器解析出数据之后,就是存储数据了.保存的形式可以多种多样,最简单的形式是直接保存为文本文件,如TXT JSON CSV等.另外还可以保存到数据库中,如关系型数据库MySQL 非关系型数 ...

  2. Html body的滚动条禁止与启用

    在写一个在页面中,经验证用户没有登录或session失效时候弹出登录框禁止页面滚动用到今天搞了一个功能,上下左右居中,模仿QQ空间里的样式,把横向和纵向滚动条禁止掉代码如下:<script ty ...

  3. WPFのBorder的用法

    border介绍: 下面是StackPanel中,一个简单的,具有轻微圆角的边框,围绕在一组按钮外面: <Border Margin="5" Padding="5& ...

  4. python五十九课——正则表达式的拓展内容

    演示正则表达式的拓展内容:函数:finditer(regex,string,[flags=0]):参数:和match.search.findall一样理解功能:将所有匹配的数据封装为一个一个的matc ...

  5. linux系统自签发免费ssl证书,为nginx生成自签名ssl证书

    首先执行如下命令生成一个key openssl genrsa -des3 -out ssl.key 1024 然后他会要求你输入这个key文件的密码.不推荐输入.因为以后要给nginx使用.每次rel ...

  6. 最好的8个 Java RESTful 框架

    原文出处: colobu 过去的每一年,涌现出越来越多的Java框架.就像JavaScript,每个人都认为他们知道一个好的框架的功能应该是怎么样的.连我的老祖母现在也使用 一个我从来没有听说过而且可 ...

  7. 解决eclipse中Tomcat服务器的server location选项不能修改的问题

    在Eclipse菜单栏中选择window — show view — server 可以看到服务的面板,服务面板中可看到已配置的Tomcat以及Tomcat下的项目 双击tomca进入设置界面,如果看 ...

  8. yii2查询汇总

    页面输出list信息 return $this->render('index', [ 'model' => $model, 'cats' => $cats, 'findlist' = ...

  9. redsi一主两从三哨兵

    1.前提准备 防火墙,selinux,主机名解析,所有主机安装gcc [root@localhost ~]# vim /etc/hosts 192.168.122.135  redis_master ...

  10. PAT A1111 Online Map (30 分)——最短路径,dijkstra

    Input our current position and a destination, an online map can recommend several paths. Now your jo ...