一,题目
L1-028 判断素数 (10分)
本题的目标很简单,就是判断一个给定的正整数是否素数。
输入格式:
输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于231的需要判断的正整数。
输出格式:
对每个需要判断的正整数,如果它是素数,则在一行中输出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");
else
printf("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;
}