ধারণা
একটি গাণিতিক অগ্রগতির প্রদত্ত প্রথম পদ (A) এবং সাধারণ পার্থক্য (d) এবং প্রাইম সংখ্যা (P) এর ক্ষেত্রে, আমাদের কাজ হল প্রদত্ত এপি-তে প্রথম উপাদানটির অবস্থান নির্ধারণ করা যা প্রদত্তের একাধিক হিসাবে বিবেচনা করা হয়। মৌলিক সংখ্যা P.
ইনপুট
A = 3, d = 4, P = 5
আউটপুট
3
ব্যাখ্যা
প্রদত্ত AP-এর চতুর্থ পদটি মৌলিক সংখ্যা 5 এর গুণিতক।
প্রথম মেয়াদ =3
দ্বিতীয় মেয়াদ =3+4 =7
তৃতীয় মেয়াদ =3+2*4 =11
চতুর্থ মেয়াদ =3+3*4 =15
পদ্ধতি
ধরে নিন শব্দটি AN। এর ফলে,
AN =(A + (N-1)*d)
সুতরাং, এটি দেওয়া হয় যে AN হল P এর একটি গুণিতক। এর ফলে,
A + (N-1)*d =l*P
এখানে, l একটি ধ্রুবক।
সুতরাং A হতে অনুমান করুন (A % P) এবং d হবে (d % P)। এখন, আমাদের আছে (N-1)*d =(l*P – A).
RHS-এ P যোগ ও বিয়োগ করার সাহায্যে আমরা −
পাই(N-1)*d =P(l-1) + (P-A),
এই ক্ষেত্রে, P-A একটি অ-ঋণাত্মক সংখ্যা হিসাবে ধরা হয়
(কারণ A কে A%P দ্বারা প্রতিস্থাপিত করা হয়েছে যা P এর থেকে ছোট) শেষ পর্যন্ত উভয় দিকে মোড নেওয়া হচ্ছে −
((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