用筛法求素数
Description
求1至N之间的所有的素数。
Input
一个数N (1<N<1000000)
Output
以空格隔开的素数。
Sample Input
10
Sample Output
2 3 5 7
python解法
n = int(input("请输入一个整数n: ")) # 读取用户输入的整数n
# 初始化一个布尔数组 "prime[0..n]",并假设所有元素都是素数
prime = [True] * (n+1)
prime[0] = prime[1] = False # 0和1不是素数
p = 2
while p * p <= n:
# 如果 prime[p] 没有改变,那么它是一个素数
if prime[p]:
# 更新所有p的倍数
for i in range(p * p, n+1, p):
prime[i] = False
p += 1
# 收集所有素数
for p in range(2, n+1):
if prime[p]:
print(p, end=" ")
c++解法
#include<bits/stdc++.h> // 引入标准库头文件,包含了大多数常用库
using namespace std; // 使用标准命名空间,避免反复写std::
bool a[1000000] = {0}; // 定义一个布尔数组a,初始化为0,用于标记素数
int main() {
int n;
cin >> n; // 读取用户输入的整数n
// 初始化:0和1不是素数
a[0] = 1; // 0不是素数
a[1] = 1; // 1不是素数
// 筛法寻找素数
for (int i = 2; i <= n; i++) { // 遍历从2到n的所有整数
if (a[i] == 0) { // 如果a[i]为0,表示i是素数
cout << i << " "; // 输出素数i
// 将i的所有倍数标记为非素数
for (int j = 2; j * i <= n; j++) {
a[j * i] = 1; // 标记i的倍数为非素数
}
}
}
return 0; // 程序正常结束
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
作者:小鱼
链接:https://www.52stu.com/?p=196
文章版权归作者所有,未经允许请勿转载。
链接:https://www.52stu.com/?p=196
文章版权归作者所有,未经允许请勿转载。
THE END