)编写程序,用筛选法求解200以内的所有素数,带格式输出所有素数, 以及素数个数。求解思路:先建立一个数组,并赋初值为2-199,再用双重循环标记每个素数的倍数为0,最后打印出数组中不为0的数即为素数。2)外重循环作为除数控制;内重循环作为被除数控制。3)优化循环:2以外的偶数不是素数,可以只考虑奇数的筛选。外重循环控制变量取值范围可在(2-√200)。
时间: 2024-02-06 11:10:14 浏览: 27
以下是Python语言的程序实现,用筛选法求解200以内的所有素数:
```python
import math
# 建立一个包含2-199的数组
arr = [i for i in range(2, 200)]
# 外重循环,控制除数
for i in range(2, int(math.sqrt(200))):
# 内重循环,控制被除数
for j in range(i+1, 200):
if arr[j-2] != 0 and arr[j-2] % i == 0:
arr[j-2] = 0
# 输出所有素数
count = 0
print("200以内的素数为:")
for i in arr:
if i != 0:
print(i, end=" ")
count += 1
# 输出素数个数
print("\n素数个数为:", count)
```
运行结果如下:
```
200以内的素数为:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
素数个数为: 46
```
相关问题
用C编写程序,用筛选法求解200以内所有素数,并带格式输出
好的,以下是用C语言编写的用筛选法求解200以内所有素数,并带格式输出的程序:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_NUM 200
#define PER_LINE 10
int main() {
bool is_prime[MAX_NUM + 1];
int i, j, count = 0;
// 初始化数组
for (i = 2; i <= MAX_NUM; i++) {
is_prime[i] = true;
}
// 筛选法求素数
for (i = 2; i * i <= MAX_NUM; i++) {
if (is_prime[i]) {
for (j = i * i; j <= MAX_NUM; j += i) {
is_prime[j] = false;
}
}
}
// 输出素数
printf("The prime numbers between 2 and %d are:\n", MAX_NUM);
for (i = 2; i <= MAX_NUM; i++) {
if (is_prime[i]) {
printf("%4d ", i);
count++;
if (count % PER_LINE == 0) {
printf("\n");
}
}
}
printf("\n");
return 0;
}
```
在输出时,我们设置了每行输出10个素数,方便查看。输出效果如下:
```
The prime numbers between 2 and 200 are:
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199
```
编写程序,用筛选法求解200以内的所有素数并带格式输出。
好的,以下是Python3的代码实现:
```python
prime = [True] * 201 # 初始化200以内所有数都为素数
prime[0], prime[1] = False, False # 0和1不是素数
# 筛选法求素数
for i in range(2, int(201 ** 0.5) + 1):
if not prime[i]:
continue
for j in range(i ** 2, 201, i):
prime[j] = False
# 格式化输出素数
count = 0
for i in range(2, 201):
if prime[i]: # 如果是素数
count += 1
print("{:<5d}".format(i), end="")
if count % 10 == 0: # 每行输出10个素数
print()
```
输出结果为:
```
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199
```
其中,`prime`列表中的每个元素表示该下标对应的数是否为素数,`True`表示是素数,`False`表示不是素数。外层循环从2开始到200的算术平方根,内层循环从当前素数的平方开始,每次加上该素数,标记所有能被该素数整除的数为非素数。最后,按照每行输出10个素数的格式输出所有素数。