मैं यह निर्धारित करने के लिए प्रोग्राम लिखने के क्लासिक सी ++ अभ्यासों में से एक के माध्यम से काम कर रहा हूं कि कौन सी संख्याएं प्राइम हैं। जिस संस्करण पर मैं अभी काम कर रहा हूं, उसके लिए मुझे यह निर्धारित करने में सक्षम होना चाहिए कि max नामक उपयोगकर्ता द्वारा इनपुट किए गए मान के लिए कौन से मान प्रमुख हैं।

मैं जिस एल्गोरिदम को बनाने का प्रयास कर रहा हूं वह निम्नलिखित फैशन में व्यवहार करता है:

१) वांछित max मान दर्ज करें।

2) इसे max लें और फिर इसे एक फंक्शन में डालें जो sqrt(max) की गणना करेगा।

3) sqrt(max) का उपयोग करके मैं sqrt(max) के मान तक अभाज्य संख्याओं का एक सदिश बनाऊंगा।

4) इस sqrt(max) वेक्टर का उपयोग करके मैं यह मूल्यांकन करूंगा कि max तक की सूची में कौन से मान प्रमुख हैं, यह निर्धारित करने के लिए एक विशिष्ट फ़ंक्शन बनाकर मूल्य max तक कौन से मान प्रमुख हैं। फिर मैं इन सभी अभाज्यों की एक सूची तैयार करूंगा।

इस संरचना के साथ यहाँ प्रयास के लिए मेरा कोड है:

#include "pch.h"
#include <algorithm>
#include <cmath>
#include <iostream>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::string;
using std::vector;

int determine_prime(int x) {
    // function made to determine if a number is prime
    // used the fact that to determine if number is prime only need to check if
    // prime values less than sqrt(x) divide x

    vector<int> vector_of_sqrt_primes = list_of_prime_sqrt();

    vp_1 = x % vp_1 = x % vector_of_sqrt_primes[i];

    for (int i = 0; i < vector_of_sqrt_primes.size(); i = i + 1) {
        if (vp_1 == 0 &&
            x != vector_of_sqrt_primes[i]) { // verifying if value is prime
            cout << x << " is not a prime number. \n";
            return 0;
        }

        else {
            cout << x << " is a prime number. \n";
            return 1;
        }
    }
}

int list_of_prime_sqrt(int y) {
    // using this vector as reference for all values less than the sqrt of max

    vector<int> vector_of_primes_sqrt = {2};
    int vps = 0;

    for (int i = 2; i < round(sqrt(y)); i = i + 1) {
        for (int j = 0; j < vector_of_primes_sqrt.size(); j = j + 1) {
            vps = i % vector_of_primes_sqrt[j];

            if (vps == 0 && i != vector_of_primes_sqrt[j]) {
                cout << i << " is not a prime number. \n";
            } else {
                cout << i << " is a prime number. \n";
                vector_of_primes_sqrt.push_back(i);
            }
        }
    }
}

int main() {
    int max = 0;
    vector<int> primes_list = {};

    cout << "Please enter the number of integers you would like to inspect "
            "whether they are prime.\n";
    cin >> max;

    list_of_prime_sqrt(max);

    for (int i = 1; i < max + 1; i = i + 1) {
        int p = determine_prime(i);

        if (p == 1) {
            primes_list.push_back(i);
        }
    }

    for (int j = 0; j < primes_list.size(); j = j + 1) {
        cout << primes_list[j] << "\n";
    }
}

तो मैं जो उम्मीद कर रहा था वह यह था कि मैं determine_prime() फ़ंक्शन में vector_of_sqrt_primes का उपयोग कर पाऊंगा और फिर यह पता लगाऊंगा कि कौन से मान प्राइम हैं जो उन्हें मेरे main() पर लौटाते हैं। लेकिन मैं एक दीवार मार रहा हूँ। तो यह सब पूछने के लिए कि क्या मेरे लिए ऐसा करने में सक्षम होने का कोई तरीका है? मैं पॉइंटर्स या उन्नत कुछ भी उपयोग करने में सक्षम होने के बिंदु पर नहीं पहुंचा हूं। मैं स्ट्राउस्ट्रप प्रोग्रामिंग सिद्धांतों और व्यवहारों के माध्यम से काम कर रहा हूँ और यह अध्याय 4 है।

0
dc3rd 27 फरवरी 2019, 06:35

1 उत्तर

सबसे बढ़िया उत्तर

आपकी समस्या को हल करने के दो अलग-अलग तरीके नीचे दिए गए हैं। एक वेक्टर लौटाता है और दूसरा उपयोग करता है पास के संदर्भ में पैरामीटर में पारित वेक्टर को संशोधित करने में सक्षम होने के लिए

#include <iostream>
#include <vector>
#include <string>

bool is_prime(int number){

    //exceptions
    if(number == 1) return false;
    if(number == 2 || number == 5) return true;

    std::string str = std::to_string(number);
    if(str.back() == '1' || str.back() == '3' || str.back() == '7' ||  str.back() == '9'){
        for(int i = 3; i * i <= number; i++){
            if(number % i == 0){
                return false;
            } 
        }
        return true;
    }
    return false;
}

//adds the value to the vector passed in and the values will 'save'
void find_primes(std::vector<int>& primes, int max){

    for(int i = 0; i < max; i++){
        if(is_prime(i)) primes.push_back(i);
    }
}

//adds the results to a vector and returns that vector
std::vector<int> return_vec_primes(int max){

    std::vector<int> results;
    for(int i = 0; i < max; i++){
        if(is_prime(i)) results.push_back(i);
    }

    return results;
}

int main(){

    std::vector<int> reference_vec;

    //pass the vector into the function
    find_primes(reference_vec, 100);

    //the function will return the vector into 'returned_vec'
    std::vector<int> returned_vec = return_vec_primes(100);

    //same results
    for(int i : reference_vec) std::cout << "prime: " << i << "\n";
    for(int i : returned_vec) std::cout << "prime: " << i << "\n";

    return 0;
}
1
donpsabance 27 फरवरी 2019, 04:50