HDU 2012 소수 판정[수론 소수 판정]

1862 단어 수론HDU
제목 링크:소수 판정
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 169265    Accepted Submission(s): 59989   Problem 설명 표현 식 n^2+n+41 에 대해 n 이(x,y)범위 내 에서 수 치 를 취 할 때(x,y 포함)(-39<=x  Input 입력 데 이 터 는 여러 그룹 이 있 습 니 다.각 그룹 은 한 줄 을 차지 하고 두 개의 정수 x,y 로 구성 되 며 x=0,y=0 일 때 입력 이 끝 났 음 을 표시 합 니 다.이 줄 은 처리 하지 않 습 니 다.  출력 은 주어진 범위 내 에서 값 을 추출 합 니 다.표현 식 의 값 이 소수 라면"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   
#include   
  
#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
"); else printf("Sorry
"); } return 0; }

좋은 웹페이지 즐겨찾기