|  | 
 
 发表于 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 就不可能是素数,可以提高部分输入的效率,这点代码中未体现。
 | 
 |