问题链接: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 "); else printf("no "); } return 0; }