用筛选法求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 浏览: 140
好的,下面是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个一行输出。
相关问题
如果--个素数的逆序仍是素数,称这两个素数为互逆序的素数对,例如,1031和1311为互逆序的素数对,编程求得1000~9999范围内的所有互逆序的素数对。
互逆序的素数对是指两个素数,当它们的数字顺序颠倒后仍然是素数。比如13和31、7和17等。要在1000到9999范围内找出所有这样的素数对,你需要编写一个程序,这个程序主要包括以下几个步骤:
1. **筛选素数**:首先,遍历给定范围内的每个数,检查它是否为素数。可以使用常见的素数判断算法,如埃拉托斯特尼筛法。
2. **记录原序和逆序**:对于找到的每个素数,同时记录其原序形式和逆序后的数字,如果两者都是素数,则标记为一对互逆序的素数。
3. **比较和存储**:检查记录的所有对,看是否有相同的原序和逆序素数,若有则保存成一对。
4. **结果输出**:最后,打印出所有的互逆序素数对。
以下是Python的一个简单示例实现:
```python
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 初始化空列表来存储互逆序素数对
inverse_pairs = []
for num in range(1000, 10000):
original = num
reversed_num = int(str(num)[::-1])
if is_prime(original) and is_prime(reversed_num):
inverse_pairs.append((original, reversed_num))
# 输出互逆序素数对
for pair in inverse_pairs:
print(f"({pair[0]}, {pair[1]})")
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;
}
```
阅读全文