用筛选法求n以内(含n,n<=1000)的素数,并逆序输出。输入 n,逆序输出n以内的素数,每10个一行,用空格隔开,行末无空格。 【输入输出样例】 输入: 100 输出: 97 89 83 79 73 71 67 61 59 53 47 43 41 37 31 29 23 19 17 13 11 7 5 3 2
时间: 2024-02-06 21:11:48 浏览: 34
好的,下面是Python的代码实现:
```
def is_prime(num):
if num < 2:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
n = int(input())
prime_list = [i for i in range(2, n+1) if is_prime(i)]
for i in range(len(prime_list)-1, -1, -1):
print(prime_list[i], end=' ')
if i % 10 == 0:
print()
```
输入100后,输出结果为:
```
97 89 83 79 73 71 67 61 59 53
47 43 41 37 31 29 23 19 17 13
11 7 5 3 2
```
其中,`is_prime`函数判断一个数是否为素数,`prime_list`为包含n以内素数的列表,倒序输出素数并每10个一行输出。
相关问题
C语言用筛选法求n以内(含n,n<=1000)的素数,并逆序输出,每10个一行。 输入:n 输出:逆序输出n以内的素数,每10个一行,用空格隔开,行末无空格。
思路:用数组标记每个数是否为素数,初始时都设为素数,然后从2开始,依次将2的倍数、3的倍数、……、大于平方根n的数的倍数标记为合数。最后遍历数组输出素数即可。
代码如下:
```c
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, j;
int prime[1001]; // 标记是否为素数
scanf("%d", &n);
// 初始化prime数组,全部设为素数
for (i = 2; i <= n; i++) {
prime[i] = 1;
}
// 筛选合数
for (i = 2; i <= sqrt(n); i++) { // 只需要筛选到sqrt(n)即可
if (prime[i]) { // i是素数,将i的倍数标记为合数
for (j = i * 2; j <= n; j += i) {
prime[j] = 0;
}
}
}
// 倒序输出素数,每10个一行
int count = 0; // 计数器,记录输出的素数个数
for (i = n; i >= 2; i--) {
if (prime[i]) {
printf("%d ", i);
count++;
if (count % 10 == 0) { // 每10个一行
printf("\n");
}
}
}
return 0;
}
```
用筛选法求n以内(含n,n<=1000)的素数,并逆序输出,每10个一行。 输入:n 输出:逆序输出n以内的素数,每10个一行,用空格隔开,行末无空格。
实现思路:
1. 定义一个长度为n+1的bool数组,用来表示数字是否为素数,初值全部设为true;
2. 从2开始,将2及其倍数标记为“非素数”,即将对应位置设为false;
3. 继续往下扫描,对于没有被标记的数字i,将i及其倍数标记为“非素数”;
4. 扫描结束后,剩下的未被标记的数字即为素数,倒序输出即可。
代码实现: