मान लीजिए हमें तीन पूर्णांक संख्याएँ n, x, y और z दी गई हैं। हमें दिए गए पूर्णांकों से एक अनुक्रम बनाना है जहां अनुक्रम का पहला आइटम है (x modulo 2 31 ) पहले तत्व के अलावा, अनुक्रम में अन्य तत्व ai =(ए<उप>(i-1)उप> * y + z) मॉड्यूल 2 31 , जहां 1 i n - 1. हमें अपने द्वारा बनाए गए अनुक्रम में भिन्न पूर्णांकों की संख्या ज्ञात करनी है।
इसलिए, यदि इनपुट n =5, x =1, y =2, z =1 जैसा है, तो आउटपुट 5 होगा।
अद्वितीय मान {1, 3, 7, 15, 31} हैं। तो, उत्तर 5 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- रक्षा मंत्रालय:=2^31
- एक सरणी अस्थायी परिभाषित करें
- मॉड के मान के लिए अस्थायी सरणी का आकार बदलें
- p :=x मॉड एमओडी
- अस्थायी[p] :=सच
- उत्तर:=1
- इनिशियलाइज़ i :=1 के लिए, जब i
करें - p :=((p * y) + z) मॉड मॉड
- यदि अस्थायी[p] सत्य है, तो −
- लूप से बाहर आएं
- उत्तरों को 1 से बढ़ाएँ
- अस्थायी[p] :=सच
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> using namespace std; const long long MOD = 2147483648; int solve(int n, long long x, long long y, long long z) { vector<bool> temp; temp.resize(MOD); long long p = x % MOD; temp[p] = true; int ans = 1; for (int i = 1; i < n; ++i) { p = ((p * y) + z) % MOD; if (temp[p]) break; ++ans; temp[p] = true; } return ans; } int main() { cout<< solve(5, 1, 2, 1) <<endl; return 0; }
इनपुट
5, 1, 2, 1
आउटपुट
5