PAT(Basic Level) 1013 数素数 (20)

令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。

项目 要求
时间限制 100 ms
内存限制 65536 kB
代码长度限制 8000 B
判题程序 Standard
作者 CHEN, Yue

令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。

输入格式

输入在一行中给出M和N,其间以空格分隔。

输出格式

输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入样例

5 27

输出样例

11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103

代码实现

Python

# 一个实例运行超时
import math

def check_prime(n):
    isPrime = 1
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            isPrime = 0
            break
    return isPrime

if __name__ == '__main__':
    m, n = [int(i) for i in input().split()]
    cnt = 0
    i = 2

    while cnt <= n:
        if check_prime(i):
            cnt += 1
            if (cnt >= m and (cnt - m) % 10 == 9) or cnt == n:
                print(i)
            elif m <= cnt < n:
                print(i, end=' ')
        i += 1

C语言

#include<stdio.h>
#include<math.h>

int check_prime(int n) {
    int isPrime = 1;
    for ( int i = 2; i < (int)sqrt(n) + 1; i++ ) {
        if ( n % i == 0 ) {
            isPrime = 0;
            break;
        }
    }
    return isPrime;
}

int main() {
    int m, n;
    int cnt = 0;
    scanf("%d %d", &m, &n);

    for ( int i = 2; cnt <= n; i++) {
        if ( check_prime(i) ) {
            cnt++;

            if ( cnt >= m && cnt <= n ) {
                printf("%d", i);
            }

            if ( cnt >= m && (cnt - m) % 10 == 9 ){
                printf("\n");
            } else if ( cnt >= m && cnt < n){
                printf(" ");
            }
        }
    }   

    return 0;
}