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

14 篇文章 0 订阅

题目链接:素数判定

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

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值