一,题目
L1-028 判断素数 (10分)
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于2?31??的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No。
输入样例:
2
11
111
输出样例:
Yes
No
二,思路
1.函数:判断是否为素数
int isprime(long a)
{
int n;if (a < 0 || a == 1)return 0;if (a == 2)return 1;for (n = 2; n * n < a; n++)//n*n<a---会超时,测试值会很大 换算法{
//改成n <= sqrt(a)if (a % n == 0){
return 0;break;}}return 1;
}
2.做判断
三,新点
1.判断素数的函数
用n^2 < a,运算时间长
用n<= sqrt(a),运行时间短
四,代码
#include<stdio.h>
#include<math.h>
int isprime(long a);
int main()
{
int n;scanf("%d\n", &n);int i, m;long a;for (i = 0; i < n; i++){
scanf("%ld\n", &a);m = isprime(a);if (m == 1)printf("Yes\n");elseprintf("No\n");}return 0;
}int isprime(long a)
{
int n;if (a < 0 || a == 1)return 0;if (a == 2)return 1;for (n = 2; n <= sqrt(a); n++)//n*n<a---会超时,测试值会很大{
if (a % n == 0){
return 0;break;}}return 1;
}