假设我们有一个AP系列的第一项(A)和共同差(d),并且我们还有素数P,我们必须找到给定AP中第一个元素的位置,该位置是AP的倍数。给定素数P。
因此,如果输入像A = 3,D = 4,P = 5,则输出将为3,因为给定AP的第四项是质数5的倍数。因此,第一项= 3,第二项= 3 + 4 = 7,第三项= 3 + 2 * 4 = 11,第四项= 3 + 3 * 4 = 15。
为了解决这个问题,我们将遵循以下步骤-
定义一个函数get_pow()。这将花费x,y,p
回答:= 1
x:= x mod p
当y> 0时
ans:=(ans * x)mod p
如果y AND 1不为零,则
y:= y / 2
x:=(x * x)mod p
返回ans
从主要方法中,执行以下操作-
A:=模组P
D:= D mod P
如果A等于0,则
返回0
否则,当D等于0时,则
返回-1
除此以外,
X:= get_pow(D,P-2,P)
return(X *(P-A))mod P
让我们看下面的实现以更好地理解-
def get_pow(x, y, p) : ans = 1 x = x % p while y > 0 : if y & 1 : ans = (ans * x) % p y = y >> 1 x = (x * x) % p return ans def get_nearest(A, D, P) : A %= P D %= P if A == 0 : return 0 elif D == 0 : return -1 else : X = get_pow(D, P - 2, P) return (X * (P - A)) % P A = 3 D = 4 P = 5 print(get_nearest(A, D, P))
A = 3 D = 4 P = 5
输出结果
3