|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
7-7 可逆素数 (30分)
输入两个正整数m和n,且m<n,求[m,n]之间的可逆素数列表。可逆素数:素数的各位数字顺序颠倒后得到的数仍是素数
输入格式:
分行输入m和n
输出格式:
输出可逆素数列表
输入样例1:
50
100
输出样例1:
[71, 73, 79, 97]
输入样例2:
200
300
输出样例1:
no exit
- m=int(input())
- n=int(input())
- lst=[]
- for i in range(m,n+1):
- for j in range(2,i):
- if i%j==0:
- break
- else:
- lst.append(i)
- break
- if len(lst)==0:
- print("no exit")
- else:
- for q in lst:
- p=str(q)
- p=p[::-1]
- p=int(p)
- for k in range(2,p):
- if p%k==0:
- lst.remove(q)
- continue
- print(lst)
复制代码
异常:Traceback (most recent call last):
File "C:\Users\Zoe\Desktop\55.py", line 20, in <module>
lst.remove(q)
ValueError: list.remove(x): x not in list
好奇怪q明明应该在lst里面鸭?
本帖最后由 jackz007 于 2021-1-6 15:24 编辑
- if i % j == 0 :
- break
- else:
- lst.append(i)
- break
复制代码
一个数只算一次就能确定是素数?
一个数如果能找到因子,那就可以否定素数,而肯定素数必须是在枚举完所有可能的因子之后,也就是在循环完以后。
- for k in range(2,p):
- if p%k==0:
- lst.remove(q)
- continue
复制代码
lst 中肯定只有一个 q,删除掉了还不 break 退出,却还 continue,意思是还要继续删除,如果 lst 中的某个素数恰好可以找到一个以上的因子,那 q 就得删除多次,你的错误就是因为这个原因造成。
下面是修改后的代码
- m = int(input())
- n = int(input())
- lst = []
- for i in range(m , n + 1):
- for j in range(2 , i):
- if i % j == 0 :
- break
- else:
- lst . append(i)
- for q in lst[:]: # 【关键点】,由于 lst 可能会在循环中被改变,所以,一定要依据其副本来控制循环
- p = int(str(q)[::-1])
- for k in range(2 , p):
- if p % k == 0 :
- lst . remove(q)
- break
- if len(lst):
- print('%d' % lst[0] , end = '')
- for i in range(1 , len(lst)):
- print(' %d' % lst[i] , end = '')
- print()
- else:
- print("no exit")
复制代码
下面是我写的代码,仅供楼主参考
- def reverse(n):
- r = 0
- while n:
- r = r * 10 + n % 10
- n //= 10
- return r
- def prime(n):
- r = False
- if n > 1:
- r , i = True , 2
- while i * i < n + 1:
- if i < n and n % i == 0 :
- r = False
- break
- i += 1
- return r
- m , n , c = int(input()) , int(input()) , 0
- for i in range(m , n + 1) :
- if prime(i) and prime(reverse(i)):
- if c :
- print(' ' , end = '')
- print(i , end = '')
- c += 1
- if c :
- print()
- else:
- print("no exit")
复制代码
|
|