|
|
发表于 2018-5-5 22:46:59
|
显示全部楼层
本楼为最佳答案
本帖最后由 久疤K 于 2018-5-5 22:53 编辑
- for p in range(0,10**7+1):
- if p%n==a and prime(p):
复制代码
这是你的代码,而你需要满足的条件是- [color=Red]p=a*k+n[/color]
复制代码
显然代码应该改成- for p in range(0,10**7+1):
- if p%a==n and prime(p):
复制代码
这是我认为的错误,后优化代码为:
- import sys
- import math
-
- def prime(n):
- if n%2 == 0:
- return n==2
- if n%3 == 0:
- return n==3
- if n%5 == 0:
- return n==5
- for p in range(7,int(math.sqrt(n))+1,2):
- if n%p == 0:
- return False
- return True
- t=int(input())
- for i in range(t):
- Rien=True
- a,n=map(int,input().split())
- # for p in range(0,10**7+1):
- for p in range(n,10**7+1,a):
- # if p%n==a and prime(p):
- if prime(p):
- Rien=False
- print(p,end=" ")
- if Rien:
- print("None")
- print('\n')
复制代码
这样,效率提高 a 倍。
如此,为了达到显示的结果与你提供的结果一致,需要交换输入的两个数的位置。
如:
- 3
- 300000 1337
- 12345 42
- 100001 42
复制代码
另外,公式 p = a * k + n,可知,如果 a 和 n 有公约数,p 就不可能是素数,可以提高部分输入的效率,这点代码中未体现。 |
|