Я работаю над одним из классических упражнений C ++ по написанию программы, чтобы определить, какие числа являются простыми числами.Версия, над которой я сейчас работаю, требует, чтобы я мог определить, какие значения являются простыми до значения, введенного пользователем, которое называется max
.
Алгоритм, который я пытаюсь построить, работает следующим образом:
1) Введите желаемое значение 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";
}
}
Итак, я надеялся, что смогуиспользовать vector_of_sqrt_primes
в функции determine_prime()
, а затем определить, какие значения являются простыми числами, и вернуть их в main()
.Но я бью стену.Итак, все это, чтобы спросить, есть ли для меня способ сделать это?Я не дошел до того, чтобы иметь возможность использовать указатели или что-то продвинутое.Я работаю над принципами и практикой программирования в Stroustroup, и это глава 4.