码迷,mamicode.com
首页 > 其他好文 > 详细

轻松搞定素数

时间:2015-02-11 23:22:53      阅读:377      评论:0      收藏:0      [点我收藏+]

标签:

素数判定

       素数,我们在数学上早就学过了吧,还记得定义是什么吗,其定义是:一个大于1的自然数,除了1和它本身外,不能整除以其他自然数(质数)整除,素数又叫质数。我们在进行素数判定的时候就要从它的定义入手。

我们先来看一道例题。

 素数判定

Description

对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。
 

Input

输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。
 

Output

对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。
 

Sample Input

0 1 0 0
 

Sample Output

OK

素数的判断可以从两个角度考虑

方法一

    只要找到有一个数能把我们要判断的数整除即可,我们就可以判断出其不是素数

方法二

    全部判断之后所有的数都不能把我们要判断的数整除,则我们就说这个是素数

其实说白了,就是一个整体一个局部思维而已,下面分别看一看代码吧

方法一(局部)

<span style="font-size:18px;"><strong><strong><span style="font-family:SimHei;font-size:18px;">#include<stdio.h>
int main()
{
	int x, y, i, m, flag, j;
	while(~scanf("%d %d", &x, &y))
	{
		flag=0;//定义初始值
		if(x==0&&y==0)
		{
			break;
		}
		for(i=x; i<=y; i++)
		{
			m=i*i+i+41;
			if(m==1)
			{
				flag=2;
			}
			else
			{
				for(j=2;j<m;j++)
				{
					if(m%j==0)
					{
						flag=2;//只要找出一个不符合即可
						break;
					}
				
				}
			}
		}
		if(flag==2)
		{
				printf("Sorry\n");
		}
		else
		{
				printf("OK\n");
		}
				
	}
	return 0;
}</span></strong></strong></span>

方法二(整体)

#include<stdio.h>
int main()
{
	int x, y, i, sum, m, count, j, flag;
	while(~scanf("%d %d", &x, &y))
	{
		count=0;
		flag=0;
		if(x==0&&y==0)
		{
			break;
		}
		else
		{
			for(i=x; i<=y; i++)
			{
				sum=0;
				m=i*i+i+41;
				if(m==1)
				{
					flag=3;
				}
				else
				{
					for(j=2; j<m; j++)
					{
						if(m%j!=0)
						{
							sum++;
						}
					}
					if(sum==m-2)
					{
						count++;
					}
				}
			
			}
			if(count==y-x+1)
			{
				printf("OK\n");
			}
			else
			{
				printf("Sorry\n");
			}
		}
	
	}
	return 0;
}
进一步分析一下,对于素数判定,一般要用到标记法,而且一定要从定义入手,通常情况下要从上面两个角度考虑,注意,要特殊考虑1,有的题目要特殊考虑0.


轻松搞定素数

标签:

原文地址:http://blog.csdn.net/unusualnow/article/details/43730785

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!