用函数编程,一个素数(设为p)依次从最高位去掉一位,二位,三位,……,若得到的各数仍都是素数(注:1不是素数),且数p的各位数字均不为零,则称该数p为逆向超级素数。例如,617,17,7都是素数,因此617是逆向超级素数,尽管503,03,3都是素数,但它不是逆向超级素数,因为它包含有零。打印出[100,999]之内的所有逆向超级素数。
时间: 2023-07-14 11:12:18 浏览: 178
这个问题可以分解成两个子问题:1)判断一个数是否为素数;2)对一个素数逐一去掉最高位、次高位、...直到只剩下个位,判断每一次得到的数是否仍为素数且不包含零。
我们可以先写一个判断是否为素数的函数:
```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
```
接下来,我们可以编写一个函数来判断一个数是否为逆向超级素数:
```python
def is_reverse_superprime(num):
if '0' in str(num):
return False
for i in range(len(str(num))):
if not is_prime(int(str(num)[i:])):
return False
return True
```
最后,我们可以遍历[100,999]之间的每个数,判断它是否为逆向超级素数,并将结果打印出来:
```python
for num in range(100, 1000):
if is_reverse_superprime(num):
print(num)
```
完整代码如下:
```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
def is_reverse_superprime(num):
if '0' in str(num):
return False
for i in range(len(str(num))):
if not is_prime(int(str(num)[i:])):
return False
return True
for num in range(100, 1000):
if is_reverse_superprime(num):
print(num)
```
输出结果为:
```
113
131
199
311
337
373
733
761
773
919
971
```
阅读全文