अवधारणा
दिए गए पहले पद (ए) और एक अंकगणितीय प्रगति के सामान्य अंतर (डी) और अभाज्य संख्या (पी) के संबंध में, हमारा कार्य दिए गए एपी में पहले तत्व की स्थिति निर्धारित करना है जिसे दिए गए गुणक के रूप में माना जाता है अभाज्य संख्या पी.
इनपुट
A = 3, d = 4, P = 5
आउटपुट
3
स्पष्टीकरण
दिए गए AP का चौथा पद अभाज्य संख्या 5 का गुणज है।
पहला कार्यकाल =3
दूसरा कार्यकाल =3+4 =7
तीसरा कार्यकाल =3+2*4 =11
चौथा पद =3+3*4 =15
विधि
मान लें कि पद AN है। इसके परिणामस्वरूप,
एएन =(ए + (एन-1)*डी)
तो, यह दिया गया है कि AN, P का गुणज है। इसके परिणामस्वरूप,
ए + (एन-1)*डी =एल*पी
यहाँ, l एक स्थिरांक है।
तो मान लें कि ए (ए% पी) और डी (डी% पी) हो। अब, हमारे पास (N-1)*d =(l*P – A) है।
RHS पर P जोड़ने और घटाने की सहायता से, हम प्राप्त करते हैं -
(N-1)*d =P(l-1) + (P-A),
इस मामले में, P-A को एक गैर-ऋणात्मक संख्या के रूप में माना जाता है
(क्योंकि A को A%P से बदल दिया जाता है जो P से छोटा होता है) अंत में दोनों तरफ mod ले रहा है -
((N-1)*d)%P =(P-A)%P या, ((N-1)d)%P =P-A
मान लें कि एक Y
अंत में उत्तर N है -
((Y*(P-A)) % P) + 1.
उदाहरण
#include <bits/stdc++.h>
using namespace std;
// Shows iterative Function to calculate
// (x1^y1)%p1 in O(log y1) */
int power(int x1, int y1, int p1){
// Used to initialize result
int res1 = 1;
// Used to update x if it is more than or
// equal to p
x1 = x1 % p1;
while (y1 > 0) {
// It has been seen that if y1 is odd, multiply x1 with
result
if (y1 & 1)
res1 = (res1 * x1) % p1;
// y1 must be even now
y1 = y1 >> 1; // y1 = y1/2
x1 = (x1 * x1) % p1;
}
return res1;
}
// Shows function to find nearest element in common
int NearestElement1(int A, int d, int P){
// Shows base conditions
if (A == 0)
return 0;
else if (d == 0)
return -1;
else {
int Y = power(d, P - 2, P);
return (Y * (P - A)) % P;
}
}
// Driver code
int main(){
int A = 3, d = 4, P = 5;
// Used to module both A and d
A %= P;
d %= P;
// Shows function call
cout << NearestElement1(A, d, P);
return 0;
} आउटपुट
3