मान लीजिए कि हमारे पास एक संख्या n है। हमें सबसे बड़ा विशेष अभाज्य ज्ञात करना है जो N से कम या उसके बराबर है। विशेष अभाज्य एक संख्या है, जिसे एक के बाद एक अंक रखकर बनाया जा सकता है, इसलिए सभी परिणामी संख्याएँ अभाज्य होती हैं।
यहां हम Sieve Of Eratosthenes का उपयोग करेंगे। हम n संख्या तक चलनी सरणी बनाएंगे। फिर संख्या एन से पुनरावृत्त रूप से वापस शुरू करें, यह जांच कर कि संख्या प्रमुख है या नहीं। जब यह प्राइम हो, तो देखें कि यह स्पेशल प्राइम है या नहीं।
उदाहरण
#include<iostream> using namespace std; bool isSpecialPrime(bool sieve[], int num) { while (num) { if (!sieve[num]) { return false; } num /= 10; } return true; } void findSpecialPrime(int N) { bool sieve[N + 10]; for(int i = 0; i<N+10; i++){ sieve[i] = true; } sieve[0] = sieve[1] = false; for (long long i = 2; i <= N; i++) { if (sieve[i]) { for (long long j = i * i; j <= N; j += i) { sieve[j] = false; } } } while (true) { if (isSpecialPrime(sieve, N)) { cout << N << '\n'; break; } else N--; } } int main() { cout << "Special prime in range (2 -> 400): "; findSpecialPrime(400); cout << "Special prime in range (2 -> 100): "; findSpecialPrime(100); }
आउटपुट
Special prime in range (2 -> 400): 379 Special prime in range (2 -> 100): 79