HDU2012 素数判定【数论 素数判定】

题目链接:素数判定

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 169265    Accepted Submission(s): 59989

 

Problem 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

 

题记:

构造判定一个数是否为素数的函数,以后再遇到素数判定问题可以直接把此函数copy来使用。

判断采用的是试除法。

素数判定函数:

int isnotprime(int n)  
{  
    if(n % 2 == 0)  
        return 1;  
  
    int end = sqrt(n), i;  
    for(i=3; i<=end; i+=2) {  
        if(n % i == 0)  
            break;  
    }  
  
    return i > end ? 0 : 1;  
}  

该题的C语言程序如下:

/* HDU2012 素数判定 */  
  
#include <stdio.h>  
#include <math.h>  
  
#define fun(n) n*n + n + 41  
  
// 试除法判断一个整数是否为素数  
int isnotprime(int n)  
{  
    if(n % 2 == 0)  
        return 1;  
  
    int end = sqrt(n), i;  
    for(i=3; i<=end; i+=2) {  
        if(n % i == 0)  
            break;  
    }  
  
    return i > end ? 0 : 1;  
}  
  
int main(void)  
{  
    int x, y, i;  
  
    while(scanf("%d%d", &x, &y) != EOF) {  
        
        if(x == 0 && y == 0)  
            break;  
  
        // 对x和y之间的数进行判定  
        for(i=x; i<=y; i++) {  
            if(isnotprime(fun(i)))  
                break;  
        }  
  
        //输出结果  
        if(i > y)  
            printf("OK\n");  
        else  
            printf("Sorry\n");  
    }  
  
    return 0;  
}

猜你喜欢

转载自blog.csdn.net/fyy_lufan/article/details/81156633