35-语言入门-35-素数

题目地址:?http://acm.nyist.net/JudgeOnline/problem.php?pid=169?

?

描述
走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起,就将与手持终端密不可分,人类未来梦想的惊喜从参观者的掌上展开。
在等候区的梦想花园中,参观者便开始了他们奇妙的体验之旅,等待中的游客可利用手机等终端参与互动小游戏,与梦想剧场内的虚拟人物Kr. Kong 进行猜数比赛。当屏幕出现一个整数X时,若你能比Kr. Kong更快的发出最接近它的素数答案,你将会获得一个意想不到的礼物。
例如:当屏幕出现22时,你的回答应是23;当屏幕出现8时,你的回答应是7;若X本身是素数,则回答X;若最接近X的素数有两个时,则回答大于它的素数。
?

输入
第一行:N 要竞猜的整数个数
接下来有N行,每行有一个正整数X
1<=N<=5 1<=X<=1000
输出
输出有N行,每行是对应X的最接近它的素数
样例输入
4
22
5
18
8
样例输出
23
5
19

7

?

?

代码:

?

#include <stdio.h>
#include <math.h>

#define true 1
#define false 0

//判断是否是素数
static int isPrimeNumber(int number);
//处理数据
static void handlerData(int inputNumber);

int main()
{
??? int readLen = 0;
??? scanf("%d",&readLen);
??? getchar();
???
??? while (readLen>0)
??? {
??????? int inputNumber = 0;
??????? scanf("%d",&inputNumber);
??????? getchar();
???????
??????? handlerData(inputNumber);
???????
??????? --readLen;
??? }
???
??? return 0;
}

//处理数据
static void handlerData(int inputNumber)
{
??? if (isPrimeNumber(inputNumber))
??? {
??????? printf("%d\n",inputNumber);
??????? return;
??? }
???
??? int step = 1;
???
??? //判断左侧的值和右侧的值
??? while(true)
??? {
??????? int leftValue = inputNumber-step;
??????? int rightValue = inputNumber+step;
???????
??????? int isLeft = false;
??????? int isRight = false;
???????
??????? if (leftValue <= 1)
??????? {
??????????? isLeft = false;
??????? }
??????? else
??????? {
??????????? isLeft = isPrimeNumber(leftValue);
??????? }
???????
??????? isRight = isPrimeNumber(rightValue);
???????
??????? if (isLeft==true || isRight == true)
??????? {
??????????? if(isLeft==true && isRight == false)
??????????? {
??????????????? printf("%d\n",leftValue);
??????????? }
??????????? else if(isLeft==false && isRight == true)
??????????? {
??????????????? printf("%d\n",rightValue);
??????????? }
??????????? else if (isLeft==true && isRight == true)
??????????? {
??????????????? printf("%d\n",rightValue);
??????????? }
???????????
??????????? break;
??????? }
???????
??????? ++step;
??? }
}

//判断是否是素数
static int isPrimeNumber(int number)
{
??? if(number < 2)
??????? return false;
???
??? int i=2;
??? int k = sqrt(number);
??? for(;i<=k;++i)
??? {
??????? if(number%i == 0)
??????????? break;
??? }
???
??? if(i > k)
??????? return true;
??? else
??????? return false;

}

?

?

总结:

1.将判断素数的过程剥离出来。

2.以当前值为中心,左右依次扩展进行判断处理

当然思考的过程是2->1,如此将大问题,逐步变成小问题。

如果要节省时间,那就将素数放在容器(数组形式容器)。

?

时间: 2024-11-08 12:05:13

35-语言入门-35-素数的相关文章

【南阳OJ分类之语言入门】80题题目+AC代码汇总

声明: 题目部分皆为南阳OJ题目. 代码部分包含AC代码(可能不止一个)和最优代码,大部分都是本人写的,并且大部分为c代码和少部分c++代码and极少java代码,但基本都是c语言知识点,没有太多差别,可能代码有的写的比较丑,毕竟知识有限. 语言入门部分题基本都较为简单,是学习编程入门的很好练习,也是ACM的第一步,入门的最佳方法,望认真对待. 本文由csdn-jtahstu原创,转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:1373758426和csdn博客地址. now begi

C语言入门(二十五)文件操作

文件操作  一.标准文件的读写 1.文件的打开fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程序就可用此FILE指针来实现对指定文件的存取操作了.当使用打开函数时,必须给出文件名.文件操作方式(读.写或读写),如果该文件名不存在,就意味着建立(只对写文件而言,对读文件则出错),并将文件指针指向文件开头.若已有一个同名文件存在,则删除该文件,若无同名文件,则建立该文件,并将文件指针指向文件开头. fopen(char *f

C语言最优化求素数

初学C语言,看到求素数的代码,不是太满意,自己设计了一个计算流程图.在贴吧里也问了一下,和"埃拉托色尼(Eratosthenes)筛法”有些撞车,当然在下不敢与数学巨匠们争长短,不过还是想自己试一下. 百度了一下有人已经用这类方法做了代码,不过和我的想法有出入. 思路: 1要避免冗余的求余计算的计算次数,这样在数字足够大的时候更能体现更高的计算效率, 1)分母排除偶数,可以减少一半的计算量.具体做法是改+1递增为从第二个素数3开始+2递增; 2)筛选求余计算的分子,而根据素数的定义,只要不被小于

第一节,C语言入门

1.标示符:    命名规则:    1.只能由字母.数字.下划线组成    2.不能数字开头    3.不能与关键字重名    4.严格区分大小写    命名规范:     1.起一个有意义名字     2.驼峰标示2.注释 注释: 对代码的解释说明,是写给程序看的,方面程序员之间交流 特点: 注释是不参与编译 /* 这里面可以写 */ 多行注释 // 这是一个单行注释 只有这一行是注释,只有 两个斜杠后面才是注释内容 /* */ command + / 注释或取消注释 多行注释是可以嵌套单行

哪有python开发语言入门教程免费下载?

人工智能时代,如果不想被机器人取代,最应该掌握的是编程.Python作为连续10年最受欢迎的编程语言,不但能开发Google .豆瓣等大型网站,还是人工智能领域的第一语言.那么,我猜你想问哪里有python开发语言入门教程. 千锋Python基础教程:http://pan.baidu.com/s/1qYTZiNE Python课程教学高手晋级视频总目录:http://pan.baidu.com/s/1hrXwY8k Python课程windows知识点:http://pan.baidu.com/

VC6.0学习C语言入门SDK

百度网盘链接 VC6.0    密码:t6bd VS2010 密码:3of2 C语言入门教程 在线视频地址(PS此链接摘抄至博主lellansin) Acfun.tv:http://www.acfun.tv/search.aspx#query=C语言入门教程 Bilibili.tv:http://www.bilibili.tv/search?keyword=C语言入门教程 最后和大家分享一个实现行列式算法的C代码 /*=======================================

《Go语言入门》第一个Go语言Web程序——简单的Web服务器

概述 上一篇讲了 <Go语言入门>第一个Go语言程序--HelloWorld,接下来讲一下Go语言Web开发入门必修课:第一个Go语言Web程序--简单的Web服务器. 与其它Web后端语言不同,Go语言需要自己编写Web服务器. 有关本地环境的搭建与基础学习,请参考: <Go语言入门>如何在Windows下安装Go语言编程环境 Go语言Web应用:IBM的云平台Bluemix使用初体验--创建Go语言 Web 应用程序,添加并使用语言翻译服务 Web服务器代码 Google在ht

简单易懂的程序语言入门小册子(9):环境,引入环境

\newcommand{\mt}[1]{\text{#1}} \newcommand{\mE}{\mathcal{E}} \newcommand{\tup}[1]{\left<{#1}\right>} 环境类似于其他语言(C++.JAVA等)的"符号表". 所谓符号表,是一张将变量名与变量代表的内容联系起来的一张表. 不过这里我们抛弃符号表的观点,单纯地从算法角度上引入环境这一概念. 引入环境 通过修改解释器求值过程的算法,可以很自然的引入环境这个概念. 在前面基于文本替换

简单易懂的程序语言入门小册子(6):基于文本替换的解释器,引入continuation

当我写到这里的时候,我自己都吃了一惊. 环境.存储这些比较让人耳熟的还没讲到,continuation先出来了. 维基百科里对continuation的翻译是"延续性". 这翻译看着总有些违和感而且那个条目也令人不忍直视. 总之continuation似乎没有好的中文翻译,仿佛中国的计算机科学里没有continuation这个概念似的. Continuation这个概念相当于过程式语言里的函数调用栈. 它是用于保存"现在没空处理,待会再处理的事"的数据结构. 这样说

1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问

1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象的创建和操作. 二,1985年,被赶出苹果公司的乔帮主成立了Next公司; 三, 1988年,Next计算机公司获得了OC语言的授权,并发展了OC语言库和一个开发环境,1994年,Next计算机公司(同年更名为Next软件公司)和Sun公司针对NEXTSTEP系统联合发布了一个标准规范,名为OPEN