质数-试除法判定质数
质数概念:在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数或者叫素数。
试除法
bool is_prime(int n)
{
if (n < 2) return false;
for (int i = 2; i <= n; i ++)
if (n % i == 0)
return false;
return true;
}
优化:
质数性质:如果d/n能整除,那么n/d / n也能整除。
比如n = 12, 3和4都是他的约数,n的约数都是成对出现的 。在枚举的时候我们可以只枚举没对较小的一个就可以了。
bool is_prime(int n)
{
if (n < 2) return false;
//i <= n / i 时间复杂度根号n
for (int i = 2; i <= n / i; i ++)
if (n % i == 0)
return false;
return true;
}
Example
给定n个正整数aiai,判定每个数是否是质数。
输入格式
第一行包含整数n。
接下来n行,每行包含一个正整数aiai。
输出格式
共n行,其中第 i 行输出第 i 个正整数aiai是否为质数,是则输出“Yes”,否则输出“No”。
数据范围
1≤n≤1001≤n≤100,
1≤ai≤2∗1091≤ai≤2∗109
输入样例:
2
2
6
输出样例:
Yes
No
#include <iostream>
#include <algorithm>
using namespace std;
bool is_prime(int n)
{
if (n < 2) return false;
//i <= n / i 时间复杂度根号n
for (int i = 2; i <= n / i; i ++)
if (n % i == 0)
return false;
return true;
}
int main()
{
//第一行包含整数n。
int n;
scanf ("%d", &n);
while (n --)
//接下来n行,每行包含一个正整数ai。
{
int a;
scanf("%d", &a);
if (is_prime(a)) puts("Yes");
else puts("No");
// cout << is_prime(a) << endl;
}
return 0;
}