您的位置:首页 > 大数据 > 人工智能

NOJ--- Find the Prime Number Again(1155)

2014-05-08 23:26 405 查看
传送   -------- http://cdn.ac.nbutoj.com/Problem/view.xhtml?id=1155
题意很纯粹 就是让你判断一个数 是不是素数 这句话 你是否正确理解 对你进行某个数的判断很重要

If the number is a prime number print "Yes", otherwise print "No" ---- 意思就是 如果是素数 输出 yes  不是就输出no

这里就涉及到一个好多小伙伴都犯错的数字 1   按照数学来说  它既不是素数 也不是合数  那么按照我刚刚上面的翻译 它不是素数 所以是输出no的

这题呢 还有一个坑点。。  很难发现的。。。

When the N is a non-postive number end of the input.   ----  只有当n <=0 时 才结束输入   而不是我们认为的当N==0 就结束输入

好了 上面这些   前戏 结束

迎来高潮 ---  神马的 素数筛选法  --- 可能自己有这概念 但很难一下子写出来  但当你看完我下面给你的代码  肯定能明白的   因为这段代码本身 还是很容易理解的

/*

参考:

首先把所有的数组元素初始化为全是素数,然后开始for循环。当我遇上某个数表示为素数时,那么它一定为素数。

反证一下:因为可以看到,在嵌套的while循环里,假如 a [ i ] 被判断为素数的那个数的倍数,那么它的倍数们全部被更正为合数,所以我最新碰到的那个数,假如不是素数,它就已经因为它的因子(为素数)被更新为合数了,所以遇上的一定是素数。

然后当for循环到结束,我们要的素数表就已经出来了。

*/

#include <iostream>
#include <cstring>
using namespace std;

#define inf 5000010

bool prime[inf];
void judge()
{
int temp,i;
prime[0] = prime[1] = true;
for(i = 2; i <= inf; i++)
{
if( !prime[i] )
{
temp = i * 2;
while(temp <= inf)
{
prime[temp] = true;
temp += i;
}
}
}
}

int main()
{
int n;
memset( prime , false , sizeof(prime) );
judge();
while( ~scanf("%d",&n) )
{
if( n<=0 )
break;
printf( "%s\n",prime
?"No":"Yes");
}
return 0;
}


如果 有什么疑问 你可以在下面给我们留言 让我们的 sex god 看一眼 来 告诉你
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: