轻松搞定素数

来源:互联网 发布:好看的喜剧电影知乎 编辑:程序博客网 时间:2024/05/13 16:36

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

我们先来看一道例题。

素数判定

Description
对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y) ,判定该表达式的值是否都为素数。
Input
输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。
Output
对于每个给定范围内的取值,如果表达式的值都为素数,则输出”OK”,否则请输出“Sorry”,每组输出占一行。
Sample Input
0 1 0 0
Sample Output
OK
下面看一下我的代码吧

#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;}

方法二(整体)

#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.

0 0
原创粉丝点击