文章目录
1. 试除法+代码风格
质数定义: 质数是指在大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的自然数。
试除法判定质数思路:
- 最基础:从
2 ~ n - 1
依次枚举查看能否整除,即存在了其它因子,则不为素数。时间复杂度 O ( n ) O(n) O(n)。 - 算法优化:因子总是成对出现,则只需要枚举到 n \sqrt n n 即可。时间复杂度为 O ( n ) O(\sqrt n) O(n)。
- 代码优化:不要使用 i < = s q r t ( n ) i <= sqrt(n) i<=sqrt(n),因为 s q r t ( ) sqrt() sqrt() 函数很慢。也不要使用 i ∗ i < = n i * i <= n i∗i<=n 因为可能存在 ( i + 1 ) ∗ ( i + 1 ) (i+1)*(i+1) (i+1)∗(i+1) 刚好越界,那么直接成负数进行死循环了。优秀的写法应该为: i < = n / i i <= n/ i i<=n/i
基础代码:
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;
}
代码优化:
#include <iostream>
#include <algorithm>
using namespace std;
int m;
bool is_prime(int n) {
if (n < 2) return false;
for (int i = 2; i <= n / i; ++i)
if (n % i == 0)
return false;
return true;
}
int main() {
cin >> m;
while (m --) {
int n;
cin >> n;
if (is_prime(n)) puts("Yes");
else puts("No");
}
return 0;
}