CCF NOI1142 质数

问题链接CCF NOI1142 质数




时间限制: 1000 ms  空间限制: 262144 KB

题目描述 

  定义质数为因数只有1和其本身的数,对于n组询问,试判断每个数是否为质数。

输入

  读入第一行一个正整数n,表示有n组询问。
  接下来n行,每行一个正整数m,表示询问m是否为质数,是则输出“yes”,否则输出“no”。

输出

  n行,每行一个字符串,代表答案。

样例输入

3
1
17
51
样例输出

no

yes

no

数据范围限制

  n≤10^3,1<m≤10^10。

提示

 




问题分析

  这是一个数论中的素性判定问题。

  数据量比较少,就用试除法来实现。

程序说明

  (略)

要点详解

  • 使用宏定义可以使得代码可阅读性增强。
  • 数据少时,用试除法进行素性判定,时间上还可以接受。
  • 要根据题意指定的数据范围选用类型。



参考链接:(略)。

100分通过的C语言程序:

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

int isprime(long n)
{
    if(n == 1)
        return 0;
    else if(n == 3)
        return 1;
    else {
        long temp, i;
        temp = n % 6;
        if(temp != 1 && temp != 5)
            return 0;

        temp = sqrt(n);
        for(i=3; i<=temp; i+=2)
            if(n % i == 0)
                return 0;

        return 1;
    }
}

int main(void)
{
    int n;
    long m;

    scanf("%d", &n);
    while(n--) {
        scanf("%ld", &m);

        if(isprime(m))
            printf("yes\n");
        else
            printf("no\n");
    }

    return 0;
}



posted on 2017-05-03 21:48  海岛Blog  阅读(390)  评论(0编辑  收藏  举报

导航