Дополнение Rolland упоминает, я отредактирован так, что SQRT вычисляется только один раз, и о 1 не является простым, глупый меня
Проверка на прайм
#include <math.h>
bool isPrime(int n)
{
if (n <= 1) return false;
if (n == 2 || n == 3) return true;
int checkRange = sqrt(n);
for (int i = 2; i <= checkRange; i++)
{
if (n % i == 0)
return false;
}
return true;
}
Вы затем хранить их в коллекции и использовать другой цикл, чтобы распечатать его
#include <vector> //Include this - vector is a standard c++ container
//Declare in your function
std::vector<int> primes;
//In your code where you get your next fibbonacci
if (isPrime(next))
primes.push_back(next);
//After you finished looping for fibbonacci
cout << endl << "Prime numbers are" << endl;
for (int i = 0; i < primes.size(); i++)
cout << primes[i] << " ";
обновления по запросу OP: Fullcode, нет вектора
Примечание: при извлечении простых чисел, чтобы вывести их отдельно с помощью фибоначчи, вы должны где-то их хранить. Поскольку вы не используете вектор, я собираюсь реализовать это с помощью массива.
Проблема с массивом заключается в том, что вы должны объявить их с размером, но вы не знаете, сколько простых чисел вы получите в тот момент, когда вы его еще объявите. Таким образом, вы должны объявить массив с размером достаточно большим, чтобы вместить все простые числа в вашем fibbonacci
#include <iostream>
#include <math.h>
#define MAX 100
using namespace std;
bool isPrime(int n)
{
if (n <= 1) return false;
if (n == 2 || n == 3) return true;
int checkRange = sqrt(n);
for (int i = 2; i <= checkRange; i++)
{
if (n % i == 0)
return false;
}
return true;
}
void main()
{
int n, c, first = 0, second = 1, next, primeCount = 0;
int primes[MAX];
cout << "Enter the number of terms of Fibonacci series you want" << endl;
cin >> n;
cout << "First " << n << " terms of Fibonacci series are :- " << endl;
for (c = 0; c < n; c++)
{
if (c <= 1)
next = c;
else
{
next = first + second;
first = second;
second = next;
}
cout << next << endl;
if (isPrime(next)) //Reuse the above isPrime
{
primes[primeCount] = next;
primeCount++;
}
}
for (c = 0; c < primeCount; c++)
cout << primes[c] << " ";
}
1 не является простым, и 'sqrt' занимает много времени, чтобы вычислить, поэтому она должна быть только сделано один раз. Кроме этого, очень приятно. :) –
Спасибо @nmtuan. Но мы можем сделать это без vector.Would будет более хорошим, если вы предоставляете полную программу cpp. –
Вероятно, можно было бы предпочесть 'i + = 2', так как бессмысленно проверять, имеет ли число четный делитель – YakovL